В простом примере, о котором идет речь, не может быть большой разницы в безопасности между двумя вызовами.Однако в общем случае snprintf()
, вероятно, более безопасен.Если у вас есть более сложная строка формата с несколькими спецификациями преобразования, может быть трудно (или почти невозможно) гарантировать, что длина буфера точно учитывается для разных преобразований, особенно если предыдущие преобразования не обязательно приводят к фиксированному числувыводимых символов.
Итак, я бы придерживался snprintf()
.
Еще одно небольшое преимущество для snprintf()
(хотя и не связанное с безопасностью) заключается в том, что он скажет вам, насколько великнеобходимый вам буфер.
Последнее замечание - вы должны указать фактический размер буфера в вызове snprintf()
- он будет обрабатывать для вас нулевой терминатор:
snprintf(buff, sizeof(buff), "%s", name);