Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C &引用;不带强制转换的整数指针;打开文件时发出警告。_C_File_Argv - Fatal编程技术网

C &引用;不带强制转换的整数指针;打开文件时发出警告。

C &引用;不带强制转换的整数指针;打开文件时发出警告。,c,file,argv,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;

我有一个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");
}
intmain(intargc,char*argv){
int fd=打开(argv[1],仅限Ordu);
int fileLength=(int)lseek(fd,0,SEEK_END);
lseek(fd,0,SEEK_集);
char buf[文件长度];
读取(fd、buf、文件长度);
int i=0;
对于(i=0;i试试这个伴侣:

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);
}
用“测试”代替你的论点,你以前试过先投吗?

试试这个搭档:

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”来输入您的参数?

char*argv
应该是
char*argv[]


您所做的是将argv声明为
char*
,然后
argv[1]
变成一个char(它是一个整数),而不是
char*
char*argv
应该是
char*argv[]


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

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

int main(int argc, char *argv[])
您将
argv
定义为一个
char*
,使其成为一个指针,而它是一个
char*
指针数组,每个
char*
元素对应于程序的一个命令行参数

出现错误的原因是,当您将
argv[1]
传递到
open()
时,
argv[1]
是单个
char
,而
open()
需要一个
char*


程序的另一个改进是,在尝试使用
argv[1]
之前检查
argc>1
。这将捕获未向程序传递任何参数的情况。

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

int main(int argc, char *argv[])
您将
argv
定义为一个
char*
,使其成为一个指针,而它是一个
char*
指针数组,每个
char*
元素对应于程序的一个命令行参数

出现错误的原因是,当您将
argv[1]
传递到
open()
时,
argv[1]
是单个
char
,而
open()
需要一个
char*


程序的另一个改进是在尝试使用
argv[1]
之前检查
argc>1
。这将捕获未向程序传递任何参数的情况。

正确的签名是

int main(int argc, char **argv)

正确的签名是

int main(int argc, char **argv)

argv
应该是
char**
而不是
char*
并且您应该像


/program filename

argv
应该是
char**
而不是
char*
并且您应该像

int main(int argc, char* argv){
/程序文件名

int main(int argc, char* argv){
必须是:

int main(int argc, char *argv[])
看到错误了吗

必须是:

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

看到错误了吗?

您的
main
函数的签名错误

应该是这样的:

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

您的
main
函数的签名错误

应该是这样的:

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

如何运行程序?您应该执行类似于
/program filename
的操作,其中文件名就是要打开的文件。
int-main(int-argc,char**argv){…}
int-main(int-argc,char*argv)
更改为
int-main(int-argc,char*argv[])
与您的问题无关,但是使用
int
作为文件长度,并强制转换
lseek
的返回类型是错误的。正确的类型是
off\u t
。您如何运行程序?您应该执行类似于
/program filename
的操作,其中文件名是您要打开的文件。
int main(int-argc,char**argv){…}
int-main(int-argc,char*argv)
更改为
int-main(int-argc,char*argv[])
与您的问题无关,但是使用
int
作为文件长度,并强制转换
lseek
的返回类型是错误的。正确的类型是
off t