我正在學習 C,并且在為 struct 陣列中的 char 陣列分配記憶體時我陷入了困境。
在第一個回圈中將值分配給 char 陣列后,當我嘗試在第二個回圈中訪問該值時。
可以請任何人幫助我嗎?謝謝你
uj5u.com熱心網友回復:
對于初學者,此代碼片段呼叫未定義的行為
char string[numDigits];
sprintf(string, "%d", 12345);
因為陣列string沒有空間來存盤'\0'由 呼叫構建的字串的終止零字符sprintf。您需要像這樣宣告陣列
char string[numDigits 1];
其次這個代碼片段
table[i].str = malloc(sizeof(char) * numDigits);
table[i].str = string;
產生記憶體泄漏,因為首先分配記憶體并將其地址分配給指標table[i].str,然后重新分配指標。
你需要寫
#include <string.h>
//...
table[i].str = malloc(sizeof(char) * ( numDigits 1 ));
strcpy( table[i].str, string );
最后,程式中的 for 回圈將被重寫為
for (i = 0; i < n; i )
^^^^^^
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/339082.html
上一篇:在沒有任何框架或庫的情況下使用vanillaJavascript進行分頁
下一篇:JAVA行內函式填充陣列
