Вся эта "дискуссия" в сети о том, что strncpy
безопасна против небезопасна, сводит меня с ума. Я нахожу некоторых людей, которые говорят, что strncpy
- это «дьявол», что для меня звучит так, будто им не хватает дисциплины программирования. Я получаю, что в конце dest
не добавляется символ \0
, когда src
больше dest
(что в конечном итоге вызывает проблемы). Я слышал о strlcpy
, но из того, что я понял, это не стандартно. Я хочу, чтобы мой код был максимально переносимым, поэтому я не считаю это жизнеспособным решением.
Вот мое текущее решение ...
Сначала определите размер буфера
#define BUFSIZE 1024
Внутри программы выделите буфер, используя calloc
char *buffer;
buffer = calloc(BUFSIZE+1, sizeof(char));
Затем в коде, скажем, я хочу скопировать msg
в buffer
, и я использую
strncpy(buffer,msg,BUFSIZE);
Так как я предварительно выделил buffer
с BUFSIZE + 1
, то это гарантирует, что последний байт buffer
равен \0
независимо от того, больше ли msg
чем BUFSIZE
.
Теперь вопрос в том, инициализирует ли calloc
массив символов с \0
? Неправильно ли интерпретировать нулевое распределение calloc
так же, как \0
?