我正在構建一個程序,它接收串行數據並將其保存到文件中。每行數據都有時間戳。在此代碼中,時間戳的數據行是s。這個fwrite爲什麼寫垃圾?
string s = get_timestamp();
cout << "input string named s is: " << s << "\n";
numChars = sizeof(s);
cout << "size is: " << numChars << "\n";
fwrite(&s, sizeof(char) , numChars , DATA_LOG);
報表的打印輸出
00000.27m,379named s is: 20130822.1141,00000.26m,379
size is: 28
你可以看到,由於某種原因,「輸入字符串命名的」似乎被覆蓋。雖然我不知道它爲什麼會發生,但這並不是我最關心的問題。)
我的主要問題是我的fwrite將垃圾保存到文件。你可以看到numChars和字符串是正確的。我試着用相同的垃圾結果代替「& s」,「static_cast(& s)」。有任何想法嗎?
我們是否爲這個'stdout'假設'DATA_LOG'?你是否熟悉術語「buffered io」? – WhozCraig
's'的類型是什麼? – interjay
我把它聲明爲'FILE * DATA_LOG;'。它包含正在寫入的文件路徑。我相信這個問題不在'DATA_LOG'中,因爲我之前已經正確寫入了它。緩衝IO?是否像將IO存儲到緩衝區一次寫入所有內容? – user2619824