在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);
}
答案 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
(在这种情况下它可以工作,然后在其他一些代码尝试访问重要事件时崩溃)。没有办法知道。