[英]c - weird fgets() behavior
我编写的以下代码应该打开作为输入提供的文件,对其进行写入和读取。
但是关于fgets-如果我使用if命令,如图所示,条件为true,如果我不知道,则输入[0]为'\\ n'字符,而输入[1]为'h',则循环运行不停止,因为fgets()不断读取第一个字符。
同样,似乎fgets()不会前进,并且已将所有文件读入输入-我可以打印input [3]并按预期方式获得“ l”,尽管fgets()被订购为只能读取2个字符。
int main(int argc, char *argv[])
{
FILE* read = NULL;
read = fopen(name, "a+");
char* input = "";
fprintf(read, "hello world\n");
fprintf(read, "hello world\n");
assert(ferror(read) == 0);
while(!feof(read))
{
if(fgets(input, 2, read)==NULL)
return 0;
printf("%c\n", input[1]);
}
return 0;
}
printf("%c\\n", input[1]);
始终会打印nul char
手册页是您的朋友。
fgets() 最多从流中读取小于大小的字符,并将它们存储到s所指向的缓冲区中。 在EOF或换行符之后停止读取。 如果读取换行符,则将其存储到缓冲区中。 终止空字节(aq \\ 0aq)存储在缓冲区中的最后一个字符之后。
char* input = "";
这使input
点指向字符串常量,尤其是空字符串。
if(fgets(input, 2, read)==NULL)
这试图修改input
指向的内容。 由于input
指向字符串常量,因此将尝试修改字符串常量。 但是,根据定义,您不能修改常量-这就是使其变为常量的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.