【发布时间】:2020-12-16 04:54:06
【问题描述】:
我试图了解如何创建一个 C 程序来声明一个“字符串数组”,其大小在声明时是未知的。这是我到目前为止所得到的:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int n, i;
char** words;
printf("How many strings you want to input? \n");
scanf("%d", &n);
words = malloc(sizeof(char*) * n);
for (i = 0; i < n; i++) {
printf("Input your %d string: ", i + 1);
scanf("%s", words[i]);
}
for (i = 0; i < n; i++) {
printf("%s\n", words[i]);
}
return 0;
}
程序编译,但我收到Segmentation fault 错误。
【问题讨论】:
-
您分配了
char *[]数组,现在您需要分配用户输入的每个 字符串,即每个words[i]都需要分配。你怎么知道大小......大谜团!要么分配一个唯一的大字符串并确保用户输入的内容不超过此,输入其中,分配words[i]与现在已知的大小,然后将大字符串复制到这个新分配的区域。 -
不检查返回值就不要使用
scanf()...
标签: c string memory-management malloc