Спасибо за ваше время, проведенное здесь. У меня есть вопрос с snprintf(), когда размер = 0, с кодом ниже:snprintf() возвращаемое значение, когда размер = 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;
}
когда я бегу:
[email protected]:~/TestCode$ ./Test_snprintf
Результат:
this string has length 17
./Test_snprintf 1 17
Что меня смущает в коде размер, который должен быть записан, равен 0, почему отображается 17?
Что я пропустил
Спасибо ~~
Я вижу. Спасибо ~~~ – momoxinduo
, почему первый snprintf может писать указателю NULL? – momoxinduo
@momoxinduo Вы передаете 'NULL', чтобы получить только длину, чтобы вы могли динамически выделять память для выполнения реальной печати. Именно то, что делает ваш код. –