c - unix 文件缺少 EOF

标签 c unix

<分区>

Possible Duplicate:
fgetc does not identify EOF
fgetc, checking EOF

我在 Unix 中创建了一个文件并将其命名为“file.txt”。我试图从我的 C 程序中读取文件内容。我无法接收 EOF 字符。 Unix 不在创建文件时存储 EOF 字符?如果是这样,使用 C 从 Unix 创建的文件中读取 EOF 的替代方法是什么。

这是代码示例

int main(){
File *fp;
int nl,c;
nl =0;
fp = fopen("file.txt", "r");
while((c = fgetc(fp)) != EOF){
  if (c=='\n')
    nl++;
}
return 0; 
}

如果我明确给出 CTRL + D,即使我使用 char c 也会检测到 EOF。

最佳答案

如果 c 的类型是 char(并且 char 在您的编译器中是无符号的,您可以通过检查CHAR_MIN 在 ) 中的值而不是 int

根据 C 标准,EOF 的值是负数。

因此,将 EOF 隐式转换为 unsigned char 将丢失 EOF 的真实值,并且比较将始终失败。

更新:有一个更大的问题必须首先解决。在表达式 c = fgetc(fp) != EOF 中,首先评估 fgetc(fp) != EOF(为 0 或 1),然后将值分配给c。如果文件中至少有一个字符,fgetc(fp) != EOF 将评估为 0,并且 while 循环的主体将永远不会执行。您需要添加括号,如下所示:(c = fgetc(fp)) != EOF

关于c - unix 文件缺少 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399978/

相关文章:

c - 在另一个字符串中的每个字符之前附加相同的字符串

c++ - mprotect:如何获取导致保护违规的指令?

database - 什么是不打算持久化,但可以存储超过 1MB 的键值内存存储系统?

objective-c - 在 Objective-C 中编写一个命令行工具,它接受输入、清除屏幕然后输出

linux - shell 脚本中的 usage() 是什么?

C、从文件创建单向链表

c - 如何实现glMultMatrixf

c - 如何使用container_of宏检索持有指针的结构

linux - 未找到 Sudo 命令(Jenkins 执行 shell 时出错)

c++ - 通过 setitimer 使用定时器时使用 Sleep()