2014-11-03 120 views
0

我想寫一個程序,需要一個名稱列表,然後將其輸出到.txt文件。C++程序崩潰的文件輸出

這是我的代碼:

void setNames() // Set method that takes a series of names. 
{ 
    nameTags = new char*[numberOfNames]; 
    for (int i=0; i<=numberOfNames; i++) 
    { 
    nameTags[i] = new char[128]; 
    cout << "Input information for name " << i << ": " << "\n"; 
    cin.getline(namesSet, sizeof(namesSet)); 
    strcpy(nameTags[i], namesSet); 
    } 
} 

ostream& operator<< (ostream& ostr, const Names& names) // <<operator 
{ 
    ostr << "#############################" << endl; 
    ostr << names.getAuthor(); 
    ostr << names.getNumberOfNames(); 
    for(int i=0; i<=names.numberOfNames; i++) 
    { 
    ostr << names.nameTags [i] << "\n"; 
    } 
    return ostr; 
} 

現在我的程序工作正常,並打印到終端。但是,當我在ofstream之後嘗試運行它時,它崩潰並且不太好。例如,如果我想輸入10個名稱,並將其保存到磁盤,則會崩潰。

ofstream outputfile (names.getFileName()); 
if(outputfile.is_open()) 
{ 
    outputfile << names; // I believe I go wrong here. 
    outputfile.close(); 
} 

我是C++的新手,如果有人能幫我解決問題,我將非常感激。我一直花費數小時試圖修復它。

+1

使用'的std :: string '和'std :: vector '而不是動態分配的char *數組* – Borgleader 2014-11-03 19:55:16

+0

如果'getline' f然後你的緩衝區都將充滿垃圾,這可能會導致問題 – 2014-11-03 20:57:25

+0

@MattMcNabb我認爲這可能是導致錯誤的getline。我已經聲明'namesSet'爲'char namesSet [100]' – user4167396 2014-11-03 22:19:54

回答

1

問題是與聲明:

for (int i=0; i<=numberOfNames; i++) 

相反,它應該是

for (int i=0; i < numberOfNames; i++) 

另外在流插入操作應該是:

for(int i=0; i < names.numberOfNames; i++) 
+0

+1。寫入緩衝區的末尾肯定能解釋它。 – 2014-11-03 19:57:35

+0

我剛剛嘗試過......沒有什麼區別。就像我提到的,我認爲它的輸出文件流 – user4167396 2014-11-03 19:58:25

+0

@ user4167396:這是一個錯誤,但導致未定義的行爲。你也可能有其他的錯誤。 – 2014-11-03 19:59:45