c - 使用 fgets() 终止循环

标签 c file-io fgets

我正在使用 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 循环应该是什么样子有什么建议吗?

最佳答案

为什么不按如下方式迭代:

int i, buflen;
buflen = strlen(buf);
for(i=0; i<buflen; i++) {
   // your code on buf[i]
}

关于c - 使用 fgets() 终止循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11519428/

相关文章:

C语言中的单词计数

c - 使用 ReadDirectoryChangesW API 监视目录

c++ - 取消引用存储在寄存器中的指针(Visual Studio)

c# - 如何在不锁定文本文件的情况下读取它?

python - 如何将每一列数据与其他每一列数据进行比较

c - 如何在C中分配多维数组所需的内存?

c - 为什么我需要使用 mpicc

c - 一个看似无用的宏参数的目的是什么(见下面的代码)

c++ - 从 C++ 中的偏移量覆盖二进制文件的字节

c - 在 C : leading zeros 中读取文件