文件输入和输出
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
(1)創(chuàng)建一個(gè)ofstream對象來管理輸出流,相對于程序來說,文本文件是外部文件,因此使用輸出流輸出到程序外部。
方法一: ofstream oftest; //使用無參構(gòu)造函數(shù)進(jìn)行初始化 char filename[6]="c:\\a.txt"; //注意轉(zhuǎn)義字符的使用 ofstream.open(filename,ostream::app); //以添加模式打開文件 方法二: ofstream oftest("c:\\a.txt",ostream::app);(2)將該對象與特定的文本文件關(guān)聯(lián)起來。可以在構(gòu)造函數(shù)中指定。
(3)使用該對象的“<<”運(yùn)算符將字符輸出到文件中,輸出字符到文本文件的程序。
代碼示例:
#include<iostream>????????? //cout
#include<fstream>??????????? //ofstream?? ifstream
#include<string>????????????? //c_str()
#include<cstdlib>????????????? //system()
using namespace std;?
//很多時(shí)候看到程序經(jīng)常是直接指定命名空間,而不是使用using語句,
//可能是考慮到用戶也可能會(huì)編寫與std命名空間中的函數(shù)同名的函數(shù)
int main(){
???
??? //文件名
??? string filename;
??? cout<<"please input the filename"<<endl;
??? cin>>filename;
???
??? ofstream fout(filename.c_str());
??? fout<<"hello world, i am writing a file"<<endl;
???
??? fout.close();
???
??? ifstream fin(filename.c_str());
???
??? char ch;
??? while(fin.get(ch)){
??????? cout<<ch;
??? }
???
??? cout<<endl;
???
??? fin.close();
??? system("pause");? //it can also be std::cin.get();
??? return 0;?
???
???
}
c_str_百度百科
http://baike.baidu.com/view/1600698.htm
函數(shù)聲明:const char *c_str();
c_str()函數(shù)返回一個(gè)指向正規(guī)C字符串的指針, 內(nèi)容與本string串相同.
這是為了與c語言兼容,在c語言中沒有string類型,故必須通過string類對象的成員函數(shù)c_str()把string 對象轉(zhuǎn)換成c中的字符串樣式。
注意:一定要使用strcpy()函數(shù) 等來操作方法c_str()返回的指針
比如:最好不要這樣:
char* c;
string s="1234";
c = s.c_str();
//c最后指向的內(nèi)容是垃圾,因?yàn)閟對象被析構(gòu),其內(nèi)容被處理(糾正:s對象的析構(gòu)是在對指針c完成賦值操作之后進(jìn)行的,故此處并沒有編譯錯(cuò)誤)
在vc++2010中提示的錯(cuò)誤原因:
應(yīng)該這樣用:
char c[20];
string s="1234";
strcpy(c,s.c_str());??? //第一個(gè)參數(shù)是目的,第二個(gè)是源
這樣才不會(huì)出錯(cuò),c_str()返回的是一個(gè)指向常量的指針,不能對其進(jìn)行操作
c_str()返回的是一個(gè)分配給const char*的地址,其內(nèi)容已設(shè)定為不可變更,如果再把此地址賦給一個(gè)可以變更內(nèi)容的char*變量,就會(huì)產(chǎn)生沖突,在2010中是不被允許的。但是如果放入函數(shù)調(diào)用,或者直接輸出,因?yàn)檫@些函數(shù)和輸出都是把字符串指針作為 const char*引用的,所以不會(huì)有問題。 (note:在vs2010中不可以將一個(gè)const char*類型賦值給一個(gè)char*.
例(2)
c_str() 以const char* 類型返回 string 內(nèi)含的字符串
如果一個(gè)函數(shù)要求char*參數(shù),可以使用c_str()方法:
string s = "Hello World!";
printf("%s", s.c_str()); //輸出 "Hello World!"
c_str在打開文件時(shí)的用處:
當(dāng)需要打開一個(gè)由用戶自己輸入文件名的文件時(shí),可以這樣寫:ifstream in(st.c_str());。其中st是string類型,存放的即為用戶輸入的文件名。
轉(zhuǎn)載于:https://my.oschina.net/ray1421/blog/686838
總結(jié)
- 上一篇: 设计模式学习笔记--解释器模式
- 下一篇: 打开CEPH内核DOUT日志输出