繁体   English   中英

c-奇怪的fgets()行为

[英]c - weird fgets() behavior

我编写的以下代码应该打开作为输入提供的文件,对其进行写入和读取。

  • fopen()正常工作,我可以访问该文件。
  • fprintf()也可以按预期工作。

但是关于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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM