sprintf()
считается небезопасным, поскольку это может привести к переполнению буфера. Если он доступен (и на многих платформах он есть), вместо него следует использовать snprintf()
.
Рассмотрим следующий код:
#include <stdio.h>
int main()
{
int i = 12345;
char buf[4];
sprintf(buf, "%d", i);
}
Это приводит к переполнению буфера. Таким образом, вам необходимо перераспределить буфер до максимального размера (в виде строки) int
, даже если вам требуется меньше символов, поскольку у вас есть возможность переполнения. Вместо этого, если бы вы использовали snprintf()
, вы могли бы указать количество символов для записи, и любое значение больше этого числа будет просто обрезано.
#include <stdio.h>
int main()
{
int i = 12345;
char buf[4];
snprintf(buf, 4, "%d", i);
//truncates the string to 123
}
Обратите внимание, что в любом случае вы должны позаботиться о том, чтобы выделить достаточно места в буфере для любого допустимого вывода. Просто snprintf()
предоставляет вам страховочную сетку на случай, если вы еще не рассмотрели тот крайний случай, когда ваш буфер мог бы переполниться.