我的任務有一個小問題。整個程序是關於樹數據結構的,但我沒有問題。C - 數組的字符串(二維數組)和內存分配讓我不想要的字符
我的問題是關於一些基本的東西:從用戶輸入讀取字符串,然後將它們存儲在一個數組中列表。
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
,我試圖以這些詞分成數組列表。
Abcde
Fghijk
Lmnop
Qrstu
當我嘗試輸出字符串時,有時會出現奇怪的字符,例如顛倒的問號和數字。
printf("%s ", list[some_number]);
讓我
Fghijk¿
或
Fghijk\200
我所有的計劃如預期,除了它我有麻煩解決這個小問題的作品。即使使用相同的確切輸入,錯誤可能會出現也可能不會出現。我猜測它與內存分配有關?
感謝您的幫助!
當你使用malloc時,不能保證你已經放在內存中的內容是什麼,你應該將它初始化爲NULL,或者至少null結束你的字符串。 – ChrisCM
我可以看到你將這些東西傳遞給其他函數嗎?另外,這些參數如何傳遞到程序中?文件,控制檯等? – nerdenator