我有这项功课要做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]
,一切正常。
答案 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”把你的论点,你先尝试先施展吗?