我遇到了動態創建char數組的問題。
下面的代碼是導致這些問題的例子:今天我分配頂級數組
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void){
char** top = NULL;
top = malloc(30*sizeof(char));
printf("sizeof top:%d\n",sizeof(top));
for(int i = 0; i < sizeof(top); i++){
top[i] = malloc(12*sizeof(char));
strcpy(top[i],"Lorem Ipsum");
}
for(int i = 0; i < sizeof(top); i++){
printf("%d: %s\tsize: %d\n",i,top[i],strlen(top[i]));
}
}
預期的輸出應該是這樣的:
sizeof top:30
0: Lorem Ipsum size: 11
1: Lorem Ipsum size: 11
2: Lorem Ipsum size: 11
3: Lorem Ipsum size: 11
4: Lorem Ipsum size: 11
5: Lorem Ipsum size: 11
6: Lorem Ipsum size: 11
7: Lorem Ipsum size: 11
,而是我得到這樣的輸出:
sizeof top:8
0: size: 0
1: Lorem Ipsum size: 11
2: Lorem Ipsum size: 11
3: Lorem Ipsum size: 11
4: Lorem Ipsum size: 11
5: Lorem Ipsum size: 11
6: Lorem Ipsum size: 11
7: Lorem Ipsum size: 11
我已經試圖改變所有數組的大小,但保持不變。我真的不明白爲什麼上面的大小停留在8,即使我嘗試分配更多的內存,爲什麼存儲到數組的第一個字符串將不會正確顯示,而其他人卻這麼做。經過一番研究,我找不到有關類似問題的任何信息。有人可以向我解釋這種情況,或推薦一個可靠的來源?
在此先感謝!
編輯:我認爲這個問題必須與char **數組的用法(它做的)有關。我不知道真正的問題是sizeof返回的值。 非常感謝您的答覆和快速幫助。
你不能用'malloc'獲得分配內存的大小。你分配'30 * sizeof(char)(= 30)'字節。沒有辦法「回到」30「。 –
尺寸不符合你的想法。 'sizeof'返回一個指針的大小而不是指向的值。 – user1937198
順便說一句:你需要'頂部= malloc(30 * sizeof(char *));'而不是'top = malloc(30 * sizeof(char));'。你想爲30個_pointers_而不是30個_chars_分配空間。 –