我编写的以下代码应该打开一个作为输入给定的文件,写入并读取。
- fopen() 工作正常,我可以访问该文件。
- fprintf() 也按预期工作。
但是对于 fgets - 如果我使用 if 命令,如图所示,条件为真, 如果我不明白 input[0] 是 '\n' 字符,而 input[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;
}
最佳答案
char* input = "";
这使得 input
指向一个字符串常量,特别是一个空字符串。
if(fgets(input, 2, read)==NULL)
这会尝试修改 input
指向的内容。因为 input
指向一个字符串常量,所以这会尝试修改一个字符串常量。但是,根据定义,您不能修改常量——这就是使它成为常量的原因。
关于c - 奇怪的 fgets() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36252750/