当试图编译这个小例子时。。。

#include <iostream>
#include <stdio.h>
#include <unistd.h>

int main(void) {
    FILE *foo;
    foo = fopen("bar.txt", "rt");
    lseek(foo, 5, SEEK_CUR);           // This line is getting compiler error
    fclose(foo);
    return 0;
}

…我在调用lseek()时遇到编译器错误。输出为:
main.cpp|8|error:     invalid conversion from ‘FILE* {aka _IO_FILE*}’ to ‘int’ [-fpermissive]|
unistd.h|334|error:   initializing argument 1 of ‘__off_t lseek(int, __off_t, int)’ [-fpermissive]|

记录在案:我也试过同时使用lseek(*foo, 5, SEEK_CUR);lseek(&foo, 5, SEEK_CUR);,但这只会让事情变得更糟。(我也没想到这能解决任何问题。)
参考man-page for lseek(3)
简介
关闭(int fildes,关闭偏移,int whence);
说明
函数的作用是:设置与文件描述符fildes相关联的打开文件描述的文件偏移量,如下所示:
[........]
我将其解释为第一个参数应该是文件描述符,在本例中是foo。
问:这里怎么了?

最佳答案

如果要在文件中查找,请使用fseek。我从没见过伊塞克用这种方式
更多信息:what's the difference between `fseek`, `lseek`, `seekg`, `seekp`?

关于c++ - 从“FILE * {aka _IO_FILE *}”到“int”的无效转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23114951/

10-11 23:16