我创建了一个指针数组,每个指针都指向一个字符串,如下所示。
#include <stdio.h>
int main() {
char *str[4];
for(int i = 0; i<4; i++)
{
scanf("%10s", str[i]);
}
puts(""); // not really required
for(int i = 0; i<4; i++)
{
printf("%s\t", str[i]);
}
return 0;
}
当我运行它时,它编译成功了。然而,当我输入一个字符串时,它给出了分段错误。有人可以帮忙吗?
这是我运行代码时得到的结果:
你好(我输入的内容) 分段错误(我按回车后立即得到这个)
char *str[4];
这声明了一个指向
char
的指针数组[4],其内容是不确定的,即它们不指向任何有意义的东西,并且取消引用它们将调用未定义的行为。
你必须像这样为指针分配内存:
for (size_t i = 0; i < sizeof str / sizeof *str; ++i) {
str[i] = malloc(MAX_STR_SIZE);
}
注意,
malloc()
返回一个空指针来指示失败,并且当不再需要内存时,返回的指针必须稍后传递给free()
。