我正在读取格式类似于以下内容的文件:
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
。当我查看文本文件时,它似乎与正确读取的所有其他时间值的格式相同。为什么它偶尔会添加一个空字符?有解决办法吗?
最佳答案
您读取了一个空行,或者您正在尝试读取超过文件末尾的内容。
第一个字符是\0
,表示字符串结束。
之后的任何字符都是未触及的内存。
关于c++ - 为什么我使用 istream::get(char*, streamsize n, char delim) 会得到奇怪的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1943481/