我正在尝试实现一个函数来读取包含2个double和int的txt文件,并以空格作为分隔符,例如(data.txt):
3.1 2.5 1
3.4 4.5 2
.....
我实现了下面的函数,它将文件名作为参数,指向2 double和int。每个指针将用于从文件中检索列。我用了 与fgets 得到线然后 sscanf的 从行中提取三个值。该程序在运行时崩溃(错误:Windows已触发program.exe中的breakpont)
...当我在从主函数返回之前设置一个断点时,检索到的值会被纠正,但是当我点击继续时程序会崩溃。
为了调试该函数,我将以下代码行添加到下面的函数ReadFile中:
if (buf[strlen(buf)-1] != '\0')
{
putchar(buf[strlen(buf)-1]); //surprisingly this line prints 1 instead of a space...
exit(1);
}
通过此更改,代码退出而不会到达函数的末尾。我不明白这一点,因为buf变量足够长,可以保存样本文件中一行的所有字符。
感谢您提出解决此问题的意见。
谢谢。
bool ReadFile(const char* fileName, double* x, double* y, int* t, int size)
{
FILE* fp;
char buf[5000];
fp = fopen( fileName, "r" );
for( int i = 0; i < size && fgets(buf, 5000, fp) != NULL; i++)
{
buf[strlen(buf)-1] = '\0';
if (buf[strlen(buf)-2] != '\0')
{
putchar(buf[strlen(buf)-1]);//surprisingly this line prints 1 instead of a space...
exit(1);
}
sscanf(buf, "%lf %lf %d", &x[i], &y[i], &t[i]);
}
fclose(fp);
return true;
}
答案 0 :(得分:0)
问题在于调用者,大小设置为1而不是数据文件中的行数。