【发布时间】:2012-07-17 09:14:57
【问题描述】:
我正在使用fgets()扫描文件如下:
char buf[50];
if (fgets(buf, 50, fp) == NULL) {
printf("Error in file parsing.\n");
exit(1);
}
char *p;
p = buf;
p 指向缓冲区,我正在使用它来遍历扫描的字符串。 fgets() 的大小为 50,但它确实在扫描字符串的末尾添加了一个空终止符。
我的 while 循环如下所示:
while (*p != '\0')
当我的文本文件有:1 + 23 时,这有效。当文本文件包含1 + 23 - 5 时,它会陷入无限循环。为什么会这样?
我还尝试检查\n,但也失败了。最后,我使用了strlen 并根据strlen 运行了一个for 循环,但这并不准确。
关于我的 while 循环应该是什么样子的任何建议?
【问题讨论】:
-
显示更多代码。您可能忘记增加
p,或者在其他地方出现错误。检查 '\0' 是正确的方法。 strlen() 非常“准确”,因此也表明其他地方有错误。 -
除了如@nos 所指出的那样忘记递增之外,您还可以将
p递增一次到多次并跳过终止的'\0'。 -
真的很想看看整个循环。尝试删除不相关的部分,同时保留重现问题的内容。
-
我确实增加了
p。我认为问题在于我正在增加\0。我想我需要检查我多次增加p的位置,如果找到\0,就跳出循环。 @JoachimPileborg 你说得对。