我正在尝试将argv复制到char数组,已经通过一些在线解决方案但最终导致了分段错误。以下是我使用的代码:
void main (int argc,const char *argv[])
{
char *arr;
arr = (char *) malloc(strlen(argv[1])+1);
strcpy(arr,argv[1]);
}
请帮助确定我做错了什么。
答案 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)
$