我正在阅读一个格式类似于:
的文件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 :(得分:2)
您已阅读空白行,或者您正在尝试阅读文件的末尾。
第一个字符是\0
,表示字符串的结尾。
之后的任何字符都是未受影响的记忆。
答案 1 :(得分:2)
试一试,看看..
ifstream inpfile("sample.txt");
char buffer[15];
inpfile.ignore(80, '\n');
while (!inpfile.eof())
{
inpfile.get(buffer, 14, ',');
int hrs, mins;
double secs;
hrs = mins = secs = -1;
sscanf_s(buffer, "%d:%d:%lf", &hrs, &mins, &secs);
cout << "hrs:" << hrs << "\t"
<< "mins:" << mins << "\t"
<< "secs:" << secs
<< endl;
inpfile.ignore(80, '\n');
}
答案 2 :(得分:0)
很可能你的输入文件中有一个尾随逗号。或者在一行的最后一个数字之后可能超过14个字符的空格。