char **res = (char **)malloc(sizeof(char *) * 1) 在這一行我使用了 {sizeof(char *) * 1} 但我已經放置了多個不同長度的字串。我不明白這是如何作業的,或者只是我的編譯器沒有顯示錯誤/警告,或者這是正確的。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main() {
char **res = (char **)malloc(sizeof(char *) * 1);
res[0] = "mang0000000o";
res[1] = "tango00000";
res[2] = "lango";
res[3] = "django";
for (int x = 0; x < 4; x ) {
puts(res[x]);
putchar('\n');
}
return 0;
}
uj5u.com熱心網友回復:
在這種情況下,您已經為長度為 1 的指標陣列分配了記憶體。當您轉向一個沒有為其分配記憶體的元素時,您只是轉向了陣列第一個元素之后的下一塊記憶體。如果您嘗試在至少一百個元素的回圈中執行此操作,您幾乎肯定會遇到分段錯誤。當您訪問尚未分配的記憶體時,不會發生該錯誤,而是當您訪問已被某人占用的記憶體時。
在這種情況下,您應該為 sizeof(char *) * (n 1) 分配記憶體,其中 n 是您需要的元素數。您將 NULL 寫入最后一個指標,以便它可以方便地通過 while 或 for 進行迭代。
uj5u.com熱心網友回復:
這應該有效:
#include<stdio.h>
#include<stdlib.h>
int main() {
const char **res = malloc(4 * sizeof *res); // Buff the size up a little bit
res[0] = "mang0000000o";
res[1] = "tango00000";
res[2] = "lango";
res[3] = "django";
for (int x = 0; x < 4; x ) {
puts(res[x]);
putchar('\n'); // Note that 'puts' automatically adds a newline character '\n'
}
free(res);?
return 0;
}
另請注意,您不一定需要string.h標題。希望這對你有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/384316.html
上一篇:關于在鏈表中使用時取消參考指標
