【问题标题】:Dynamic Array of char Pointerchar指针的动态数组
【发布时间】:2012-01-09 18:49:24
【问题描述】:

我正在尝试定义一个动态数组,其中包含指向字符串的 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);


}

【问题讨论】:

    标签: c multidimensional-array dynamic-arrays


    【解决方案1】:

    您的代码中有多个问题。在您修复所有问题之前它不会起作用

    • 您没有为buffer 分配内存。如果不是因为下一个可能更严重的问题,Scanf 会写得稀里糊涂
    • 您应该将buffer 传递给scanf,而不是&buffer
    • 您没有为input[i] 分配内存。你只是在分配 input 的内存。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          问题是你将buffer定义为一个指针,但你没有将它指向可以保存扫描字符串的东西,所以scanf在未分配的内存中写出来,这真的很糟糕。你也没有分配input[i] 所以strcpy 也会失败。您可能希望将其更改为使用 strdup

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

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

          scanf("%s", buffer);
          

          而且您不应该转换realloc(或malloc)的结果:

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

          【讨论】:

            【解决方案5】:

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

            scanf("%s", buffer);
            

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

            【讨论】:

              猜你喜欢
              • 2021-01-26
              • 1970-01-01
              • 2018-04-05
              • 2012-03-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-04-15
              • 1970-01-01
              相关资源
              最近更新 更多