2012-01-05 55 views
-1

我使用C++中的fputs在文件中寫入字符串。使用帶有字符串類型參數的fputs

fputs (const char*, FILE*); 

如果我用一個簡單的聲明一樣,

fputs ("information", pFile);

一切正常和「信息」將被寫入到文件中。但是,如果我寫類型的變量,

std::vector<std::string>

到文件中,一些非ASCII字符都存儲在文件中。我是否必須使用一種方法將std::vector<std::string>類型轉換爲fputs可以識別的格式?

+1

你必須使用C++程序'fputs'一個很好的理由?如果不是,你可能應該使用C++ iostream工具而不是C函數。如果您確實有充分的理由,那麼將其添加到問題中可能會讓您獲得更好的回覆。 – 2012-01-05 00:22:55

+0

我在OMNET ++模擬器中編碼。我只找到訪問文件的C代碼。也許如果我更徹底地搜索,我可以找到用C++訪問文件的頭文件。 – ManiAm 2012-01-05 00:38:31

回答

0

使用

fprintf (pFile, "%s", iterVar.at(currentRun).c_str()) 

,而不是你不希望使用data()曾經因爲它缺少尾隨\0

(此代碼是基於@ GregHewgill的回答提問者的評論,其中iterVarvector<string>類型。)

+0

感謝Aaron McDaid,但我在我的代碼中嘗試了c_str()和data()。他們都顯示這樣無法辨認的字符! 這就是 – ManiAm 2012-01-05 00:43:26

+0

這個問題可能在別的地方。你需要給我們更多的信息。也許你把不正確的數據*放到了矢量中? – 2012-01-05 00:59:40

3

正確,fputs不明白std::vector如何在內存中佈局。

當您嘗試將std::vector傳遞給fputs()時,實際上應該有編譯錯誤。您是否嘗試通過添加演員或其他東西來解決錯誤?的

fprintf (pFile, "%s", iterVar.at(currentRun).data()) 

+0

是的你是對的,但我用()來獲取矢量的特定位置的字符串。我的意思是: std :: vector iterVar = ... fprintf(pFile,「%s」,iterVar.at(currentRun).data()); – ManiAm 2012-01-05 00:11:13

+2

粘貼無效的代碼! – 2012-01-05 00:12:01

+0

'fputs()'也不知道如何編寫'std :: string'值。由於您使用的是C++,因此無論如何您都應該使用iostream。這可以工作:'pFile << iterVar.at(currentRun);'(只要'pFile'是一種合適的'std :: ostream')。 – 2012-01-05 00:12:17

相關問題