非常长的字符串,带有myPrint()函数,将会崩溃。
我认为从Linux手册页中可以看出vsnprintf()无法返回写入的大小超过缓冲区长度。
我的预期字符串是缓冲区大小的截断字符串,但是下面的测试代码完全错误。
下面的代码有什么问题吗?
void myPrint(const char* fmt, ...)
{
char buffer[512] = {0,};
va_list arg;
va_start(arg, fmt);
int r = vsnprintf(buffer, 511, fmt, arg); // buffer size is given
if (r > 0) // works correctly
buffer[r+1] = '\0'; // crash because r is 200,000
va_end(arg);
}
int main(int, char**)
{
const char * data = "abcdefg...." // assuming that a length is 200,000 byte string
myPrint("%s\n", data);
}
vsnprintf
已经做了这个。 - user694733