繁体   English   中英

如何使用数组数组来存储C语言中可变长度的字符串?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM