Я использую ниже кодstrncpy и с помощью SizeOf для копирования Максимального количества символов
char call[64] = {'\0'} /* clean buffer */
strncpy(call, info.called, sizeof(call));
Я всегда использую SizeOf для назначения для защиты переполнения, упаковывает источник больше, чем назначения. Таким образом, я могу предотвратить переполнение буфера, поскольку он будет копировать столько, сколько может обрабатывать адресат.
Но теперь я задаюсь вопросом, не приведет ли он к прекращению назначения.
Пару случаев.
1) Если источник больше. я мог бы сделать это:
call[strlen(call) - 1] = '\0'; /* insert a null at the last element.*/
2) Если источник меньше назначения. вызов - 64 байта, и я копирую 50 байт, так как это размер источника. Будет ли он автоматически помещать нуль в элемент 51?
Большое спасибо за любую информацию,
Один простой способ гарантировать, что конечный пункт nul завершен здесь, чтобы выполнить вызов [sizeof call -1] = 0; – nos
Я не думал, что strncpy завершит строку. Не завершая строку. Может ли это привести к реальной проблеме? Кроме того, выполняя этот вызов [strlen (info.called - 1] = '\ 0 "; что это правильный способ прекратить работу, если источник больше или меньше адресата? Спасибо. – ant2009
Да, строка с неисчерпаемыми символами приведет к' strlen() ',' strcat() 'и т. д., чтобы быть неправильным, поврежденной памятью и/или сбоем. Установка последнего байта буфера на ноль ничего не наносит, когда строка короче места назначения, поэтому нет причин для того, чтобы сделать его условным. –