提问人:Malcolm 提问时间:1/30/2018 最后编辑:PabloMalcolm 更新时间:1/30/2018 访问量:2414
EOF 可以与 \n 在同一行上吗
Can EOF be on the same line as \n
问:
正如标题所说,可以与 ?我目前正在做一个用 C 重新创建的项目,我正在实现发生的事情,我试图弄清楚我是否会得到文本文件的最后一行:EOF
"\n"
getline
EOF
"blahblahblahblah\n\0"
或
"blahblahblah\n
\0"
答:
EOF 是通知没有更多输入的信号。最后名为 EOF 的文件中没有实际数据。EOF 与 null 字符不同。\0
我想你想知道你是否可以在不先获得换行符的情况下获得 EOF。答案是肯定的。如果文件末尾没有换行符,即最后一行结束时没有换行符,这是可能的。您可以通过打开文本编辑器,键入一些文本并保存,退出而无需按 Enter 键来轻松生成此类文件。该文件的末尾不会有任何换行符。
评论
0x1A
0x1A
EOF 可以与 \n 在同一行上吗
是的,但很少。
EOF
是一个常数,通常用于表示 1) 文件结束或 2) 罕见的输入错误。它通常不会被编码为文本流中的字符。
返回值 from 和 friends 可以随时出现 - 甚至在行中间由于错误而出现。EOF
fgetc()
否则,不可以:
文件末尾不会出现在带有 .通常,文件中至少包含 1 个字符(并且没有“\n”)的最后一行也将是一行。'\n'
文本流是组成行的有序字符序列,每行由零个或多个字符以及一个终止换行符组成。最后一行是否需要终止换行符是实现定义的。C11dr §7.21.2 2
评论
'\0'
'\n'
'\0'
扩展 @taskinoor 和 @chux 的答案,在查看您的示例后,我认为您可能会与字符串的终止字节混淆。EOF
'\0'
EOF
是一个值,其功能类似于 Return,用于告诉用户它无法从流中读取更多内容。这就是为什么你经常看到这个:getc
// fp is a FILE*, it may be stdin
// it may be a file on the disk or something
// else
int c;
while((c = getc(fp)) != EOF)
{
// doing something with the character
}
请注意,这里声明为 ,因为 是 和
是返回的东西。我之前在这里做过一个声明1 不太正确,chux
指出了我的错误,我想在这里引用他/她的评论:c
int
EOF
signed int
getc
用户 chux 对我的回答发表评论
EOF
,作为负常数,通常为 -1,并且可以适合 ,当 char a . 与其说它不合适,不如说将 a 存储在 char 中是无法区分的 从存储中,比如说一个值为 255 的字符。char
signed char
EOF
char
'\0'
另一方面,是用于终止 C 中的字符串的字节。在 C a 字符串只不过是以 C. 结尾的字符序列 字节。我们使用数组来存储字符串。所以和是不同的 事物,甚至有不同的价值观。char
EOF
\0
脚注
1请注意,这里声明为 ,因为 是 和
实际上不适合 ,所以它永远不会成为 C 字符串的一部分。c
int
EOF
signed int
char
评论
EOF
,作为负常数,通常为 -1,并且可以拟合 ,当 .与其说它不合适,不如说将 a 存储在 a 中与将值为 255 的字符存储在 a 中是无法区分的。char
char
signed char
EOF
char
char
评论
0x1A
EOF
EOF
不能存储在字符串中,因为 是有符号整数,不适合 .EOF
char
"blahblahblahblah\n\n\0"