我試圖避免使用像sprintf和朋友(安全原因)的事情固定的緩衝區大小,但是,當我改變它使用sizeof爲arg2 - > arg1,我的程序文本輸出已損壞/無法正確顯示/缺少某些部分。使用sizeof與sprintf/vsnprintf破壞文本
具體而言,即:
vsnprintf(putbuf, LARGE_BIG_BUFFER_SIZE, format, args);
到
vsnprintf(putbuf, sizeof putbuf, format, args);
我的文本輸出所有與簡單的sizeof變化損壞/短。我錯過了什麼嗎?
原來的功能:
to_screen(const char *format,...)
{
if (window_display && format) {
va_list args;
va_start(args, format);
vsnprintf(putbuf, LARGE_BIG_BUFFER_SIZE, format, args);
va_end(args);
}
}
「putbuf」聲明如何和在哪裏? – ecatmur
您還應該檢查打印功能的返回值。 –
如果putbuf是一個數組,sizeof將只返回一個數組的大小。即使在這種情況下,如果它是大小爲10的整數數組,sizeof將返回40(假設32位機器的int大小爲4)。 – fayyazkl