使用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