2012-04-26 31 views
4

對於無關緊要的問題感到抱歉,但我似乎無法得到此工作,任何幫助將不勝感激。使用字符數組作爲文件名?

const int sz = 24; 


int main() 
{ 
char a [sz]; 

for (int i = 0; i < 5; i++) 
    cin >> a[i]; 

ifstream inFile; 

inFile.open(a); 

cout << inFile.good() << endl; 


return 0; 
} 

這是什麼,我試圖做一個較小的版本,那就是打開INFILE流與。開()和文件名,我想傳遞一個,這是一個字符數組。我在正確的目錄中有一個名爲a.txt的文件(我已經證實了這一點),所以我輸入了讀入數組的a.txt,但inFile.good()仍然返回false。我也知道這個數組大於5個字符,但我認爲這不會影響它。

如果需要更多信息,請告訴我。

+0

你需要null來終止你的c字符串。 'a [5] = NULL;' – philipvr 2012-04-26 05:58:20

+0

a.txt與C程序存在於同一個目錄中嗎? – cppcoder 2012-04-26 05:58:20

+0

你有空終止數組,所以你可以使用它作爲一個字符串? – John3136 2012-04-26 05:59:06

回答

2

open所述的簽名是:

void open (const char * filename, ios_base:openmode mode = ios_base::in); 

所看到的拳頭參數是字符串常量(NUL終止字符數組)。在你的情況下,最後沒有nul字符。要發生這種情況,您需要一個比您要輸入的最大文件名大小更大的數組。

爲什麼不使用一個cin讀取字符?正如:

cin >> a; 
ifstream inFile; 
inFile.open(a); 

甚至更​​好使用String類來獲取用戶輸入,然後使用c_str()得到const char*相當於這可以傳遞給open

+0

我不知道你可以使用cin直接讀取數組,例如,謝謝 – DanielAden 2012-04-26 06:03:42

+0

@coaddict - 對於ifstream和ofstream類,ios :: in和ios :: out是自動分別假定的,即使一個模式不包括它們作爲第二個參數傳遞給open()成員函數。 – cppcoder 2012-04-26 06:19:19

相關問題