了解第三个参数

时间:2018-07-19 14:42:50

标签: c file

我有这个片段

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

我不明白这部分

 (FILE)sp

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

1 个答案:

答案 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;
}