[英]How can array of arrays be used to store string of variable length in C language?
以下是我的代码
int main(){
char *movies[500];
int i=0;
while(*(movies[i])!='$'){
scanf("%s",(movies[i]));
i++;
}
}
输出是分段错误。 有人可以解释一下吗?
movies[i] = malloc(<size>);
在向每个指针写入内容之前为每个指针分配内存。
您的指针movies[i]
没有指向任何有效的内存位置,并且您尝试写入它将导致未定义的行为,从而导致崩溃。
一旦完成使用内存free()
它相应
首先,您没有数组数组; 你有一个指针数组。 执行此操作时,必须随时分配各个字符串。 如果你有一个数组数组,你会这样声明:
char movies[500][500]; // <<== Not recommended
但是,您的方法在内存方面更经济。
其次,您的退出条件(用户输入$
作为电影名称的第一个字符)将永远不会成立,因为您总是在填充movies[i]
之前检查该值。
以下是解决此问题的方法:
char buf[500];
int count = 0;
for (;;) {
scanf("%s", buf);
// Check exit condition here
if (buf[0] == '$') {
break;
}
// Make a copy
movies[count] = malloc(strlen(buf)+1);
strcpy(movies[count++], buf);
}
...
// Don't forget to free the strings that you allocated
for (int i = 0 ; i != count ; i++) {
free(movies[i]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.