Идиоматические способы использования strcpy()
и strncpy()
:
Если вы знаете, что в буфере есть место для строки плюс терминатор NUL, вы можете использовать strcpy()
. Это, вероятно, будет использовать константы или иметь проверки в коде (вы должны убедиться, что проверки правильные).
В противном случае вы можете сделать:
strncpy(dest, src, length);
dest[length - 1] = '\0';
, который имеет следующие недостатки:
- может обрезать строки.
- это потенциально неэффективно, так как оно всегда заполняет
length
байт.
Существует также OpenBSD strlcpy()
.
Любое другое использование strcpy()/strncpy()
потенциально подозрительно, и вам следует внимательно на них смотреть.
Итог: избегайте строковых функций C для чего-либо достаточно сложного, попробуйте использовать некоторую библиотеку для динамически размещаемых строк. Qmail / Postfix свертываются самостоятельно, GNU имеет препятствий .