作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [轉錄]想請問關於ifstream open file的問題...
時間Tue Dec 22 02:09:02 2009
※ 引述《ric2k1》之銘言:
: 標題: 想請問關於ifstream open file的問題...
: 時間: Mon Dec 21 23:56:52 2009
: 在作業六裡面,readCir傳入的參數是string&
: 但是ifstream 的open function的傳入參數是char*
: 我稍微試了一下,發現 char* c = "blahblah"; string s = c; 這樣寫是可以的
: 但是相反過來就不行?? string s ="blahblah"; char* c = s; (compile error!!)
char* 是 pointer, 但是 string 是 class.
"string s = c" 會呼叫 string 的 constructor 將 "char* c" 傳進去,
但是 char *c 不能隨便 assign, 除非 RHS 也是 char *.
: 所以我在測試的時候readCir都傳char*進去...
: 可是又發生其他問題,當我寫 char* fileName = "C17.cir"; 傳進readCir沒有問題
: 但當我寫 char* fileName; cin >> fileName; 再傳進去就有問題了
You need to allocate memory for a pointer variable. In your case, fileName is
used without initialization, so it will definitely crash because ostream is
tring to writing something to "*fileName"...
: 程式會在測試用的main裡面所有東西執行完之後最後發生"記憶體區段錯誤"的訊息
: ddd的錯誤訊息是segmentation fault,然後是停在 #include<string.h>前面...
: 不明白...這到底是為什麼呢??
Try:
1.
string fileName;
cin >> fileName;
ifstream ifile(fileName.c_str());
OR 2.
char fileName[1024]; // assume strlen(fileName) is < 1024... not good though
cin >> fileName;
ifstream ifile(fileName);
OR 3.
char *fileName = new char[1024];
cin >> fileName;
ifstream ifile(fileName);
delete [] fileName;
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.46.80