我試圖將整數串列轉換為緊湊字串,但出現分段錯誤。代碼如下:
int *factors = job_factorization(number, size);
char buffer[250] = { 0 };
for (int i = 0; i < *size; i ) {
sprintf( &buffer[i], "%d ", *factors);
factors ;
}
該job_factorization
函式回傳串列的頭部(它有效,我已經測驗過),并將指向的值設定為size
串列的實際大小(即整數的數量)。我無法弄清楚出了什么問題,有人知道嗎?
uj5u.com熱心網友回復:
請注意以下備注:
sprintf( &buffer[i], "%d ", *factors);
不轉換上一次轉換結束時的數字。sprintf
不檢查緩沖區溢位:如果size
足夠大,它最終將寫入緩沖區末尾之外。修改
factors
可能不是一個好主意,因為這個指標應該在使用后被釋放。
這是一個替代方案:
int *factors = job_factorization(number, size);
char buffer[1024];
size_t pos = 0;
for (int i = 0; pos < sizeof buffer && i < *size; i ) {
pos = snprintf(buffer pos, sizeof buffer - pos, "%d ", factors[i]);
}
您還可以使用 2 個回圈來計算轉換所需的大小并分配所需的空間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483988.html
上一篇:為什么這會發生在C指標上?
下一篇:C-交替指標