Как правильно называть snprintf? - PullRequest
0 голосов
/ 02 марта 2020

Я хотел бы знать, каков безопасный / простой / правильный способ вызова snprintf?

#define 1024

char cwdir[SIZE];address[SIZE]
int n=0;
....
...
snprintf(path, sizeof(path), "%s/%i", address, n);

g cc 8.3 показывает

‘%i’ directive output may be truncated writing between 1 and 11 bytes into a region of size between 0 and 1023 [-Werror=format-truncation=]
  snprintf(path, sizeof(path), "%s/%i", address, n);
                                               ^~
prog.c:272:2: note: ‘snprintf’ output between 3 and 1036 bytes into a destination of size 1024
  snprintf(path, sizeof(path), "%s/%i", address, n);

1 Ответ

0 голосов
/ 02 марта 2020

что такое безопасный / простой / правильный способ вызова snprintf?

  • safe - Это зависит от того, что вы считаете безопасным. Ваш путь безопасен, поскольку он определил поведение.
  • simple - Ваш путь, конечно, прост.
  • правильное - Правильный путь будет чтобы определить размер массива path так, чтобы даже если строка address имела максимально возможную длину 1023, весь вывод address , sla sh и n вписывается в path, т.е. char path[SIZE+1+11];.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...