(1)建立一個ofstream對象來管理輸出流,相對於程序來講,文本文件是外部文件,所以使用輸出流輸出到程序外部。ios
方法一: ofstream oftest; //使用無參構造函數進行初始化 char filename[6]="c:\\a.txt"; //注意轉義字符的使用 ofstream.open(filename,ostream::app); //以添加模式打開文件 方法二: ofstream oftest("c:\\a.txt",ostream::app);
(2)將該對象與特定的文本文件關聯起來。能夠在構造函數中指定。c++
(3)使用該對象的「<<」運算符將字符輸出到文件中,輸出字符到文本文件的程序。app
代碼示例:函數
#include<iostream> //cout
#include<fstream> //ofstream ifstream
#include<string> //c_str()
#include<cstdlib> //system()
using namespace std;
//不少時候看到程序常常是直接指定命名空間,而不是使用using語句,
//多是考慮到用戶也可能會編寫與std命名空間中的函數同名的函數spa
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.htmcode
函數聲明:const char *c_str();htm
c_str()函數返回一個指向正規C字符串的指針, 內容與本string串相同.對象
這是爲了與c語言兼容,在c語言中沒有string類型,故必須經過string類對象的成員函數c_str()把string 對象轉換成c中的字符串樣式。ci
注意:必定要使用strcpy()函數 等來操做方法c_str()返回的指針
好比:最好不要這樣:
char* c;
string s="1234";
c = s.c_str();
//c最後指向的內容是垃圾,由於s對象被析構,其內容被處理(糾正:s對象的析構是在對指針c完成賦值操做以後進行的,故此處並無編譯錯誤)
在vc++2010中提示的錯誤緣由:
應該這樣用:
char c[20];
string s="1234";
strcpy(c,s.c_str()); //第一個參數是目的,第二個是源
這樣纔不會出錯,c_str()返回的是一個指向常量的指針,不能對其進行操做
c_str()返回的是一個分配給const char*的地址,其內容已設定爲不可變動,若是再把此地址賦給一個能夠變動內容的char*變量,就會產生衝突,在2010中是不被容許的。可是若是放入函數調用,或者直接輸出,由於這些函數和輸出都是把字符串指針做爲 const char*引用的,因此不會有問題。 (note:在vs2010中不能夠將一個const char*類型賦值給一個char*.
例(2)
c_str() 以const char* 類型返回 string 內含的字符串
若是一個函數要求char*參數,可使用c_str()方法:
string s = "Hello World!";
printf("%s", s.c_str()); //輸出 "Hello World!"
c_str在打開文件時的用處:
當須要打開一個由用戶本身輸入文件名的文件時,能夠這樣寫:ifstream in(st.c_str());。其中st是string類型,存放的即爲用戶輸入的文件名。