我试图避免使用像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