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()
(在循环之前)已经尝试使用未初始化的指针复制数据。