使用myPrint()函数的很长的字符串会崩溃。vsnprintf返回给定缓冲区大小的大小
我认为vsnprintf()无法从linux手册页返回缓冲区长度的写入大小。
我期望的字符串是缓冲区大小的截断字符串,但从下面的测试代码是完全错误的。
下面有什么错?
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