#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:
Нет, в конечном итоге вы попытаетесь выполнить запись в недопустимые ячейки памяти, что приведет к неопределенному поведению.