动态数组的char指针

时间:2011-11-30 14:35:03

标签: c multidimensional-array dynamic-arrays

我正在尝试定义一个包含指向字符串的char指针的动态数组。字符串可以是任意长度,所以我使用了char指针。我希望每次需要存储更多值时动态调整数组大小。以下代码给出了分段错误。我做得好吗?

int main() {
    char **input=NULL;
    char *buffer;

    int i=0;

    do {
        input = (char **)realloc(input, (i+1) * sizeof(char *));

        scanf("%s", &buffer);
        strcpy(input[i++],buffer);

    } while(strlen(buffer)!=0);


}

5 个答案:

答案 0 :(得分:8)

您的代码中存在多个问题。在你修复所有这些之后它才会起作用

  • 您没有为buffer分配内存。如果不是下一个可能更严重的点,那么Scanf会写入空气中。
  • 您应该将buffer传递给scanf,而不是&buffer
  • 您没有为input[i]分配内存。你只是分配 input的记忆。

答案 1 :(得分:1)

缓冲区未初始化。除了& buffer是一个指向指针的指针,而不是你可能想要的字符数组。

答案 2 :(得分:1)

问题是您将buffer定义为指针,但是您没有将其指向可以保存扫描字符串的内容,因此scanf会在未分配的内存中写出非常糟糕的内容。您也不会分配input[i],因此strcpy也会失败。您可能希望将其更改为使用strdup代替:

input[i++] = strdup(buffer);

另外几个挑剔:当扫描一个字符串时,你不需要字符串缓冲区上的&,所以重做这样:

scanf("%s", buffer);

并且你不应该将realloc(或malloc的结果投射到那个问题上):

input = realloc(input, (i+1) * sizeof(char *));

答案 3 :(得分:1)

除了已在其他答案中列出的问题之外,循环永远不会终止为:

scanf("%s", buffer);

在读取至少一个字符(不包括行尾字符)之前不会返回。

答案 4 :(得分:0)

您的缓冲区和输入[i]未分配。