【发布时间】:2013-05-31 01:19:25
【问题描述】:
我的作业有一个小问题。整个程序都是关于树数据结构的,但我对此没有任何问题。
我的问题是关于一些基本的东西:从用户输入中读取字符串,然后将它们存储在一个数组list中。
char str[1000];
fgets(str, 1000, stdin);
int x = 0;
int y = 0;
int z = 0;
char **list;
list = (char**)malloc((x+1)*sizeof(char));
list[x] = (char*)malloc((y+1)*sizeof(char));
while(str[z] != '\n')
{
list[x][y] = str[z];
z++;
if(str[z] == ',')
{
x++;
y = 0;
list = (char**)realloc(list, (x+1) * sizeof(char*));
list[x] = (char*)malloc((y + 1)*sizeof(char));
z++;
if(str[z] == ' ') // Skips space after the comma
{
z++;
}
}
else if(str[z] == '\n')
{
break;
}
else
{
y++;
list[x] = (char*)realloc(list[x], (y+1)*sizeof(char));
}
}
我将此列表数组传递给另一个函数。 例如,输入可能类似于
Abcde, Fghijk, Lmnop, Qrstu
我正在尝试将这些单词中的每一个拆分为数组 list。
Abcde
Fghijk
Lmnop
Qrstu
当我尝试输出字符串时,我有时会感到奇怪、过多的字符,例如倒置的问号和数字。
printf("%s ", list[some_number]);
了解我
Fghijk¿
或
Fghijk\200
我的所有程序都按预期工作,除了这个我无法解决的小问题。即使使用相同的确切输入,错误也可能会出现,也可能不会出现。我猜它与内存分配有关?
感谢您的帮助!
【问题讨论】:
-
当你使用 malloc 时,不能保证你预留的内存中包含什么,你应该将它初始化为 NULL,或者至少 null 终止你的字符串。
-
我可以看到您将内容传递给的其他函数吗?另外,这些参数是如何传递到程序中的?文件、控制台等?
标签: c arrays string memory-management multidimensional-array