我有这个片段
fseek(sp,f_line*fm,SEEK_SET);
fgets(buffer,LEN,(FILE*)sp);
我不明白这部分
(FILE)sp
我尝试用文件中的数据填充char数组。
答案 0 :(得分:1)
显然,有人认为他们正在将文件指针存储在非sp
类型的变量FILE *
中,因此据说有必要将类型强制转换为FILE *
。请参见fgets()
的POSIX定义,它等同于函数的standard C定义。
但是,鉴于前一行以未广播的fseek()
呼叫sp
,并且fseek()
也期望有FILE *
,所以有人感到困惑-编写演员的人困惑。
fgets()
的呼叫中删除。或者,可能但不切实际的是,应将强制转换添加到对fseek()
的调用中。
一种可能性是用户定义了void *sp
并使用它来存储FILE *
返回的fopen()
或等效值。这样的决定将是极不合常规的,毫无意义地打开了代码以键入混淆,但实际上可能允许下面显示的代码进行编译和运行,但是强制转换仍然是不必要的。
/* 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;
}