c++ - 为什么我使用 istream::get(char*, streamsize n, char delim) 会得到奇怪的结果?

标签 c++ c++builder ifstream

我正在读取格式类似于以下内容的文件:

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/

相关文章:

c++ - 从多个 C++ 和 C 目标文件生成单个 .so

c# - Windows 钩子(Hook)的奇怪行为

dll - TApplication 并将 C++Builder 应用程序拆分为 DLL

delphi - 我可以在调试 C++ 应用程序时单步执行 VCL (Pascal) 代码吗?

c++ - 如何从文件中生成 "2 dimentional vector"行 X 字?

c++ - ifstream.read 只读取文件的一半

即使 gcount 返回 0,C++ iostream 也不会设置 eof 位

c++ - 将 Perl 移植到 C++ `print "\x{2501 }"x 12;`

c++ - g++ 相对路径

c++ - 如何从C++调用Delphi DLL WideString参数(包括var参数)