C中的分段错误尝试连接命令行参数

时间:2014-10-08 05:00:46

标签: 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);
free(str);

正如您所看到的,我正在重新分配内存块以便连接新的String。但是我得到了Segmentation Fault:11

2 个答案:

答案 0 :(得分:1)

char *str;

strcpy之前未为上面的char指针分配内存。使用malloc/calloc分配内存。

此外,您无法使用sizeof,因为sizeof根据平台,任何指针都是84字节。

同样适用于sizeof(argv[i]) + 1。我认为它应该是strlen(argv[i]) + 1

答案 1 :(得分:1)

char *str;

这只是创建一个指针。您通常可以使用指针指向存储器位置,但是您不能将数据复制到指针,因为它本身没有存储器。

首先必须分配一个内存:

str = (char *)malloc (sizeof(argv[1]) * sizeof(char));

或者您可以分配char缓冲区,然后分配strcpy:

char str[MAX_STR_LENGTH] = {0};
strcpy (str, argv[1]);

在第二种情况下,str也是str [0]的指针,因此是str char缓冲区的第一个元素。