我讀與類似格式的文件:類似於以下我怎麼得到奇怪的結果與istream :: get(char *,streamsize n,char delim)?
TIME, x, y, z
00:00:00.000 , 1, 2 , 3
00:00:00.001 , 2 , 3 , 4
等,以及代碼:
std::ifstream& istream;
char buffer[15];
double seconds, hours, mins; // initialised properly in real code
// to read in first column
istream.get(buffer, 14, ',');
int scanned = std::sscanf(buffer, "%d:%d:%lf", &hours, &mins, &seconds);
它讀取的第一列適用於大部分的時間。但是,有時sscanf會失敗,當我使用Codegear調試器檢查緩衝區中的內容時,我發現它已經讀入\000:00:023
。由於某種原因,它正在收集空字符,即\0
。當我查看文本文件時,它看起來與正確讀入的所有其他時間值的格式相同。爲什麼偶爾會添加空字符?有沒有解決辦法?
但它只發生在我讀入的一些時間值和所有行的格式一致。那麼爲什麼它讀了一個空行? – Seth
十六進制編輯器是否驗證文本文件中是否有空值?你在檢查istream.eof()嗎? istream.bad()? istream.fail()? –
是的 - 它實際上正確讀取上次的值。但是,錯誤發生在下一個循環時,它會嘗試讀取文件的末尾。我很困惑,因爲調試器顯示緩衝區中最後一次讀取的值是在它前面的'\ 0'處。 – Seth