C中的分段错误。尝试连接命令行参数
我正在尝试将命令行参数连接到一个字符串中。我最初使用字符类型的指针来声明字符串C中的分段错误。尝试连接命令行参数,c,segmentation-fault,strcat,C,Segmentation Fault,Strcat,我正在尝试将命令行参数连接到一个字符串中。我最初使用字符类型的指针来声明字符串 char *str; strcpy(str, argv[1]); int i = 2; while(i < argc) { realloc(str, sizeof(str) + sizeof(argv[i]) + 1); str = strcat(str,argv[i]); i+=1; } printf("%s", str); fr
char *str;
strcpy(str, argv[1]);
int i = 2;
while(i < argc) {
realloc(str, sizeof(str) + sizeof(argv[i]) + 1);
str = strcat(str,argv[i]);
i+=1;
}
printf("%s", str);
free(str);
char*str;
strcpy(str,argv[1]);
int i=2;
而(i
如您所见,我正在重新分配内存块以连接新字符串。但我有一个错误:11
char *str;
strcpy
之前未为上述字符指针分配内存。请使用malloc/calloc
分配内存
您也不能使用sizeof
,因为sizeof
任何指针都是8
或4
字节
同样对于sizeof(argv[i])+1
,我认为应该是strlen(argv[i])+1
char *str;
这只是创建了一个指针。通常可以用指针指向内存位置,但不能将数据复制到指针,因为指针本身没有存储内存
您首先必须分配一个内存:
str = (char *)malloc (sizeof(argv[1]) * sizeof(char));
或者,您可以分配一个字符缓冲区,然后再分配strcpy:
char str[MAX_STR_LENGTH] = {0};
strcpy (str, argv[1]);
在第二种情况下,str也是指向str[0]的指针,因此是str char buffer的第一个元素。
sizeof(str)
并不像您想象的那样。通常为8或4,具体取决于您的平台sizeof(argv[i])
是一样的。除此之外,您的第一个strcpy()
(在循环之前)已经尝试使用未初始化的指针复制数据。