Vielen Dank für Ihre Zeit zum ersten Mal hier verbracht. Ich habe eine Frage mit snprintf(), wenn size = 0, mit dem Code unten:snprintf() Rückgabewert, wenn size = 0
#include <stdio.h>
#include <stdlib.h>
int main(int ac, char **av)
{
char *str;
int len;
len = snprintf(NULL, 0, "%s %d", *av, ac);
printf("this string has length %d\n", len);
if (!(str = malloc((len + 1) * sizeof(char))))
return EXIT_FAILURE;
len = snprintf(str, len + 1, "%s %d", *av, ac);
printf("%s %d\n", str, len);
free(str);
return EXIT_SUCCESS;
}
wenn ich laufe:
[email protected]:~/TestCode$ ./Test_snprintf
Das Ergebnis ist:
this string has length 17
./Test_snprintf 1 17
Was mich verwirrt ist im Code ist die zu schreibende Größe 0, warum 17 angezeigt?
Was habe ich verpasst
Dank ~~
ich sehe. Danke ~~~ – momoxinduo
Warum kann der erste snprintf auf einen Nullzeiger schreiben? – momoxinduo
@momoxinduo Sie übergeben 'NULL', um nur die Länge zu erhalten, so dass Sie dynamisch Speicher für den tatsächlichen Druck zuweisen können. Genau was dein Code macht. –