打开文件时,“没有强制转换的整数指针”警告。

时间:2012-03-29 13:52:26

标签: c file argv

我有这项功课要做C.我是初学者所以这可能很容易,但无论如何我都有问题。

int main(int argc, char* argv){

    int fd=open(argv[1], O_RDONLY);
    int fileLength=(int)lseek(fd,0,SEEK_END);
    lseek(fd,0,SEEK_SET);
    char buf[fileLength];
    read(fd,buf,fileLength);
    int i=0;
    for(i=0; i<fileLength; i++){
        printf("%c",buf[i]);
    }
    printf("\n");
}

我收到此错误:

warning: passing argument 1 of ‘open’ makes pointer from integer without a cast

如果我写"file"而不是argv[1],一切正常。

7 个答案:

答案 0 :(得分:4)

int main(int argc, char* argv){

必须是:

int main(int argc, char *argv[])

查看错误?

答案 1 :(得分:1)

char* argv应为char* argv[]

你所做的是将argv声明为char*然后argv[1]变为char(这是一个整数)而不是char *

答案 2 :(得分:1)

正确的签名是

int main(int argc, char **argv)

答案 3 :(得分:0)

您的问题出在main()声明中,应该是:

int main(int argc, char *argv[])

您将argv定义为char *,使其成为单个指针,而它是char *指针的数组,每个char *元素对应一个命令行参数到您的计划。

您获得的错误是由于当您将argv[1]传递给open()时,argv[1]是一个char,而open()期待char *

您的计划的另一项改进是在尝试使用argc > 1之前检查argv[1]。当你没有将任何参数传递给你的程序时,这将捕获案例。

答案 4 :(得分:0)

argv应该是char **而不是char *也应该像

一样运行程序

./program filename

答案 5 :(得分:0)

您的main函数的签名错误。

它应该是这样的:

int main(int argc, const char *argv[]) // notice how 'argv' is now a 'const char *[]',

答案 6 :(得分:-2)

试试这个伙伴:

main () {
    FILE *fin  = fopen ("test.in", "r");
    FILE *fout = fopen ("test.out", "w");
    int a, b;
    fscanf (fin, "%d %d", &a, &b);  /* two input integers */
    fprintf (fout, "%d\n", a+b);
    exit (0);
}

而不是“test.in”把你的论点,你先尝试先施展吗?