gpt4 book ai didi

c - fopen/fgets 使用 char* 而不是 FILE*,为什么这样行得通?

转载 作者:太空狗 更新时间:2023-10-29 15:33:01 24 4
gpt4 key购买 nike

我注意到在使用 fopen 和 fgets 时,我在代码中使用了 char* 变量而不是 FILE* 变量,但我的代码有效。我想知道这是为什么?我的一段代码如下。

...
char* filePath = ac->filepath;
char* line = malloc(sizeof(char) * MAX_CHAR_PER_LINE) ;
filePath = fopen(filePath, "r"); // we are assigning the result to a char*, not FILE*
if (filePath == NULL) {
printf ("\n[%s:%d] - error opening file '%s'", __FILE__, __LINE__, filePath);
printf ("\n\n");
exit (1);
}

while ((fgets(line, MAX_CHAR_PER_LINE, filePath) != NULL)) {
...

最佳答案

char*FILE* 都只是存储一个内存地址。 C 的类型相当弱(编辑:这是我的误解,请参阅下面的评论)因此它允许您分配指针而不用担心它们指向的类型。

fopen 返回一个 FILE 对象的地址,您将该地址存储在某处(在您的例子中,它在 char* 中)。当您在 fgets 中使用地址时,它仍然具有 FILE 对象的地址,因此一切都会按预期工作。

关于c - fopen/fgets 使用 char* 而不是 FILE*,为什么这样行得通?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18153591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com