我想读取三个文件的路径(例如“../c/..file”),以及来自argv []的long并将它们绑定到三个已经创建的char *,还有一个长值叫做num。
这是我的主要功能:
int main(int argc, char* argv[]){
char* file1 = NULL;
char* file2 = NULL;
char* file3 = NULL;
long num = 0;
//copy the file paths to the char*'s
strcpy(file1, argv[1]);
strcpy(file2, argv[2]);
strcpy(file3, argv[3]);
// convert from string to long int
num = strtol(argv[4],NULL,0);
}
但是这不起作用,文件的文件名和long的值不会像变量那样以变量结束。
我该如何解决这个问题?
在我的程序中,我检查argc值以确保我没有传递错误的东西,但在这里我用这种方式编写函数只是为了说明我的问题。
答案 0 :(得分:7)
不要指向那些没有指向分配内存的指针。相反,只需将它们设置为等于argv数组中的指针,这些指针已指向已分配的内存。像这样:
int main(int argc, char *argv[])
{
if (argc < 5)
fprintf(stderr, "usage: %s <file1> <file2> <file3> <num>\n", argv[0]), exit(1);
char *file1 = argv[1];
char *file2 = argv[2];
char *file3 = argv[3];
long num = strtol(argv[4], NULL, 0);
/* Do stuff */
return 0;
}
答案 1 :(得分:3)
如果要从argv复制字符串,则必须在程序中为这些字符串分配内存。例如
int main(int argc, char* argv[])
{
char *file1, *file2, *file3;
long num = 0;
if ( argc > 1 )
{
file1 = malloc( strlen( argv[1] ) + 1 );
strcpy( file1, argv[1] );
}
if ( argc > 2 )
{
file2 = malloc( strlen( argv[2] ) + 1 );
strcpy( file2, argv[2] );
}
if ( argc > 3 )
{
file3 = malloc( strlen( argv[3] ) + 1 );
strcpy( file3, argv[3] );
}
if ( argc > 4 )
{
num = strtol( argv[4], NULL, 0 );
}
//...
答案 2 :(得分:2)
main(int argc,char *argv[])
{
if(argc != 5)
printf("Error message");
else{
//perofmr your operation what you want
}
}