I've asked the same question about strncpy
, but there the string
ends up containing the whole input string. When passing a string to vsnprintf
the last character always gets chopped off: https://rextester.com/UIQMX91570
For simplicity I've also included the live example link above inline in the code:
void bar(const char* format, va_list vlist) {
const auto buf_size = vsnprintf(nullptr, 0U, format, vlist);
string buffer(buf_size, '');
vsnprintf(data(buffer), buf_size, format, vlist);
cout << data(buffer) << endl;
}
void foo(const char* format, ...) {
va_list vlist;
va_start(vlist, format);
bar(format, vlist);
va_end(vlist);
}
If I call this with: foo("lorem ipsum %d", 13)
the output I get is:
lorem ipsum 1
Where as I would have expected: lorem ipsum 13
Can anyone explain the discrepancy? When I debug I get a buf_size
of 14 which should be enough to contain the entire string, yet it does not :(
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…