3 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
這是Stack Overflow的原始答案。正如其他人所說,你需要的snprintf不是sprintf。確保的第二個(gè)參數(shù)snprintf是zero。這將阻止snprintf寫入NULL作為第一個(gè)參數(shù)的字符串。
需要第二個(gè)參數(shù),因?yàn)樗黶nprintf表明沒有足夠的空間可用于寫入輸出緩沖區(qū)。當(dāng)沒有足夠的可用空間時(shí),如果有足夠的可用空間,則snprintf返回將要寫入的字節(jié)數(shù)。
從這里的鏈接中復(fù)制代碼...
char* get_error_message(char const *msg) {
size_t needed = snprintf(NULL, 0, "%s: %s (%d)", msg, strerror(errno), errno) + 1;
char *buffer = malloc(needed);
sprintf(buffer, "%s: %s (%d)", msg, strerror(errno), errno);
return buffer;
}
- 3 回答
- 0 關(guān)注
- 629 瀏覽
添加回答
舉報(bào)