我编写的以下代码应该打开一个作为输入,写入和读取的文件 .
-
fopen()正常工作,我可以访问该文件 .
-
fprintf()也按预期工作 .
但至于fgets - 如果我使用if命令如图所示条件为真,如果我没有得到输入[0]是'\ n'字符而输入[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;
}
2 回答
这使
input
指向一个字符串常量,特别是一个空字符串 .这会尝试修改
input
指向的内容 . 由于input
指向字符串常量,因此尝试修改字符串常量 . 但是,根据定义,你可以't modify a constant -- that' s使它保持不变 .printf("%c\n", input[1]);
永远打印nul char手册页是你的朋友 .