fgets函数的第一个参数

时间:2015-03-30 21:24:40

标签: c file pointers

fgets(s, 10, fp)中,s是从文件" text.txt"中读取的地址。开始。我是对的吗?

如果是这样,该函数如何知道s在这样声明时指向的位置?我一直以为s会在内存中随机自由定位吗?  有人可以更深入地解释为什么这段代码从" text.txt"开始阅读?

我是C的新手。

fp = fopen("text.txt", "r");
    if (fp != NULL)
    {
        char *s
        printf("content of file:\n");
        while ((s = fgets(s, 10, fp)
        {
            printf("%s", s);
        }
        fclose(fp);
    }

3 个答案:

答案 0 :(得分:4)

你必须将一个有效指针作为第一个句子传递给fgets,它必须指向内存至少与第二个参数中指示的一样大。

你可以改变

char *s 

char *s = malloc(10);

char s[10];

fgets后面的代码会将文件中的数据复制到已分配的内存中。

答案 1 :(得分:3)

您确实正在将文本读入内存中的随机位置。这可能会崩溃,或成功,或完全做其他事情。一旦你写入不属于你的记忆,所有的赌注都会被取消。

要么像这样声明s

char s[10];

或分配:

s = malloc(10);

答案 2 :(得分:2)

s是存储从文件中读取的字节的位置。 (它不是"在文件中的哪个地方开始阅读",它"在它之后放置字节' s读取它们")

在这种情况下,您不能将s设置为任何内容,因此您不知道它包含的内容。 (换句话说,它没有初始化)

因此,您要告诉fgets将其在某个位置读取的字节存储起来,并且您不知道该位置是什么。也许它是一个未分配的地址(这将导致段错误),也许它是一些没有使用的内存(在这种情况下它可以工作),或者它可能指向你刚刚讲述的重要内容覆盖fgets(在这种情况下它可以工作,然后在其他一些代码尝试访问重要事件时崩溃)。没有办法知道。