从C中读取argv

时间:2015-03-22 17:47:34

标签: c

我想读取三个文件的路径(例如“../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值以确保我没有传递错误的东西,但在这里我用这种方式编写函数只是为了说明我的问题。

3 个答案:

答案 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
             }
  }