【问题标题】: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 的内存。
【解决方案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);
在读取至少一个字符之前不会返回,不包括行尾字符。