gpt4 book ai didi

c - fgets关于第三个参数

转载 作者:行者123 更新时间:2023-11-30 20:19:09 25 4
gpt4 key购买 nike

我有这个片段

fseek(sp,f_line*fm,SEEK_SET);
fgets(buffer,LEN,(FILE*)sp);

我不明白这部分

 (FILE)sp

我尝试用文件中的数据填充字符数组。

最佳答案

显然,有人认为他们将文件指针存储在不是 FILE * 类型的变量 sp 中,因此据说有必要强制转换类型到文件*。请参阅 fgets() 的 POSIX 定义,这相当于 standard C函数的定义。

但是,鉴于前一行使用未转换的 sp 调用 fseek(),并且 fseek() 也需要 FILE *,有人很困惑——编写类型转换的人很困惑。

  • 应该从对 fgets() 的调用中删除强制转换。

或者,可能但令人难以置信的是,应该将强制转换添加到对 fseek() 的调用中。

<小时/>

一种异常的可能性是用户定义了 void *sp 并使用它来存储由 fopen() 或等效函数返回的 FILE * 。这样的决定是非常不正统的,并且毫无意义地导致代码类型困惑,但实际上可以允许下面显示的代码编译和运行 - 但强制转换仍然是不必要的。

/* Abominable code - do not use! */
#include <stdio.h>

int main(void)
{
void *sp = fopen("abuse47.c", "r"); // The abomination!
if (sp != 0)
{
char buffer[256];
fseek(sp, 120, SEEK_SET);
if (fgets(buffer, sizeof(buffer), sp) != 0)
printf("[%s]\n", buffer);
fclose(sp);
}
return 0;
}

关于c - fgets关于第三个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51425562/

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