将argv复制到char数组时出错

时间:2014-10-31 08:00:21

标签: c++ c

我正在尝试将argv复制到char数组,已经通过一些在线解决方案但最终导致了分段错误。以下是我使用的代码:

void main (int argc,const char *argv[])
{
    char *arr;
    arr = (char *) malloc(strlen(argv[1])+1);
    strcpy(arr,argv[1]);
}

请帮助确定我做错了什么。

3 个答案:

答案 0 :(得分:5)

似乎argv [1]等于NULL或甚至不存在(C标准允许argc可能等于0)。

添加以下检查

char *arr;

if ( argc > 1 )
{
    arr = (char *) malloc(strlen(argv[1])+1);
    strcpy(arr,argv[1]);
}
else
{
    // print some error message
}

答案 1 :(得分:0)

  

请帮助确定我做错了什么。

好的,先生。你在问argv [1],但你不确定它是否存在。访问其边界外的数组具有未定义的行为。您应该始终检查参数的数量是否符合您希望避免未定义的行为:

if ( argc < 2 )
{
    // error, cannot copy argv[1] because it doesn't exist. Explain this to user
}

// now OK..., also we postponed allocation of arr pointer 
char *arr =  malloc( strlen( argv[1]) + 1);
        //^^^^
        // no need to cast return value of malloc in C

strcpy( arr, argv[1]);

答案 2 :(得分:0)

使用命令行输入时,我们应该处理参数的数量。

你可以尝试这样的事情......

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void main (int argc, const char *argv[])
{
 if(argc==2)//change condition based on your requirements
 {
  char *arr;
  arr = (char *) malloc(strlen(argv[1])+1);
  strcpy(arr,argv[1]);
  printf("string is %s\n",arr);
 }
else
 {
 printf("check your command line input (only 2 parameters)\n");
 }
}

输出:

 $ ./a.out 
 check your command line input (only 2 parameters)
 $ ./a.out hello
 string is  hello
 $ ./a.out hi hello
 check your command line input (only 2 parameters)
 $