Sehr lange Zeichenfolge mit MyPrint() -Funktion wird abstürzen.vsnprintf gibt die Größe über die angegebene Puffergröße zurück
Ich dachte, dass vsnprintf() nicht die geschriebene Größe über die Pufferlänge von Linux Man Seite zurückgeben kann.
Meine erwartete Zeichenfolge ist abgeschnittene Zeichenfolge in Puffergröße, aber das ist völlig falsch von unter Testcode.
Was ist falsch unten ??
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);
}
Sie müssen keine Zeichenfolge nach Gespräch zu beenden, 'vsnprintf' bereits das tut. – user694733