【发布时间】:2016-07-15 03:30:33
【问题描述】:
我编写的以下代码应该打开一个作为输入的文件,写入并读取。
- fopen() 工作正常,我可以访问该文件。
- fprintf() 也可以正常工作。
但至于 fgets - 如果我使用 if 命令,如图所示,条件为真, 如果我没有得到那个 input[0] 是 '\n' 字符,而 input[1] 是 'h',并且循环运行不会停止,因为 fgets() 会一次又一次地读取第一个字符。
另外,似乎 fgets() 没有前进并且已将所有文件读入输入 - 我可以打印输入 [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指向一个字符串文字。不能修改字符串文字。所以你的程序有未定义的行为。您需要为input分配一个内存缓冲区。此外,在fprintf之后,如果你想读回你刚刚写的内容,你需要rewind文件指针。最后,请参阅Why is “while ( !feof (file) )” always wrong?。