57得票3回答
getc() 和 fgetc() - 主要区别是什么?

我到处都看到“它几乎是相同的”,或者类似的话... 从GNU C编程教程中: GNU C库中还有另一个函数叫做fgetc。它在大多数方面与getc相同,除了getc通常被实现为宏函数并且高度优化,因此在大多数情况下更可取。(在从标准输入读取时,因为人类键入较慢,所以getc与fget...

13得票5回答
使用C语言中的fgets和fgetc来读取一行的区别

我需要读取一行文本(以换行符作为终止符),但不能假设其长度。因此,我现在面临两种可能性: 使用fgets函数,并每次检查最后一个字符是否是换行符并将其连续附加到缓冲区中 使用fgetc函数逐个读取每个字符,不时使用realloc重新分配缓冲区大小 直觉告诉我fgetc变体可能会更慢,但...

13得票5回答
== EOF和feof的区别让人困惑

我打开了一个文件,流被找到在指针ptr的地址上。我试图查看文件是否为空。使用以下代码:if (fgetc(ptr) != EOF) 正常工作。当文件为空时,语句不会被执行。当文件不为空时,语句也不会被执行。然而,使用if (!feof(ptr)) 始终执行该语句。 为什么会发生这种情况?有没...

13得票2回答
fgetc,检查EOF

在书籍 Linux系统编程 中,我读到了类似以下内容的描述: fgetc 返回读取的字符作为无符号字符转换为 int 或者在文件结束或出错时返回 EOF。使用 fgetc 的一个常见错误是:char c; if ((c = fgetc()) != EOF) {...} 这段代码的正确版...

10得票4回答
一个未签名的字符是否可能等于EOF?

使用fgetc函数读取流的下一个字符时,通常要检查是否已经到达文件结尾,方法是: if ((c = fgetc (stream)) != EOF) 其中c是int类型。然后,要么已到达文件末尾并且条件失败,要么c将是转换为int的unsigned char,预计它与EOF不同—因为确保EOF...

9得票4回答
使用C/C++逐个字符读取字符串直到行末

如何逐个字符读取字符串,并在到达行末时停止?我使用fgetc函数从文件中读取字符,并将字符放入数组中(后来会将数组更改为malloc),但无法确定如何在到达行末时停止。 尝试了以下代码(c是从文件中读取的字符变量): if(c=="\0") 但是它报错说我不能将指针与整数进行比较。 ...

8得票3回答
`fgetc()` 为什么可能返回 `EOF`?

当发生文件结束或输入错误时,fgetc()函数确实返回EOF。这是否意味着没有更多的数据可用呢? FILE *inf = ...; int ch; while ((ch = fgetc(inf)) != EOF) { ; } if (feof(inf)) puts("End-of-fil...

8得票6回答
比较无符号字符和EOF

当以下代码编译时,它会进入一个无限循环: int main() { unsigned char ch; FILE *fp; fp = fopen("abc","r"); if(fp==NULL) { printf("Unable to...

8得票3回答
如何更好地检查fgetc()的EOF和错误?

我通常采用这种方法。 int c; while ((c = fgetc(fp))!=EOF) { printf("%c", c); } 在我看来,使用if (feof(fp))更易读且更健壮。但是在我的回答链接中,chux评论道: 如果 (feof(fp)) 比 int c;...