c - 奇怪的 fgets() 行为

标签 c file

我编写的以下代码应该打开一个作为输入给定的文件,写入并读取。

  • 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/

相关文章:

file - BAT 文件执行后保持 CMD 打开

file - 为什么golang File struct设计成这样

c - 如何将文件的编号存储在整数数组中

c - c中的指针运算和二维数组?

c - 单线程C逐行打印文件

c - 使用 C 在 OS X 中获取其他进程的 argv

c - OR __m128 中的元素

c - 在 C 中理解和编写 wchar_t

python - 打印 MJPEG 帧

c++ - 使用 mmap 逐行读取文件