Безопасна ли memcpy () при копировании некоторого содержимого, превышающего летнее время?

#c #c #memcpy

#c #c #memcpy

Вопрос:

Безопасно ли это, когда request_token.size() значение больше LEN ?

 char dst[LEN];
memcpy(dst, request_token.c_str(), request_token.size());
  

Ответ №1:

Нет, это небезопасно; вы вызовете переполнение буфера. Причина в том, что memcpy нет способа узнать размер вашего целевого буфера, кроме размера, который вы передаете в третьем аргументе.

Ответ №2:

Нет, определенно нет, это приведет к переполнению буфера и вызовет неопределенное поведение, которое приведет ко всевозможным неприятностям, включая, но не ограничиваясь, повреждением данных и сбоем программы.

Комментарии:

1. «coppuprtion»? Носовые демоны тоже повлияли на ваш текст? 😉

Ответ №3:

Нет, это небезопасно. Прочтите это: http://msdn.microsoft.com/en-us/library/dswaw1wk (ПРОТИВ 80).aspx

Используйте memcpy_s(): http://msdn.microsoft.com/en-us/library/dswaw1wk (ПРОТИВ 80).aspx

Комментарии:

1. memcpy_s является нестандартным и не переносимым. Просто убедитесь, что вы не копируете больше размера буфера.

2. Это также опора для людей, которые не умеют правильно кодировать на C. Если вы не хотите изучать, как правильно использовать инструменты, вернитесь к БАЗОВОМУ 🙂

Ответ №4:

Нет, в конечном итоге вы попытаетесь выполнить запись в недопустимые ячейки памяти, что приведет к неопределенному поведению.