Разница между "strcpy" и "strcpy_s"?

Когда я пытаюсь использовать strcpy для копирования строки, это дало мне ошибку компиляции.

error C4996 'strcpy': This function or variable may be unsafe.

Вместо этого используйте strcpy_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Подробнее см. Интерактивную справку.

В чем разница между strcpy и strcpy_s?

Ответ 1

strcpy - это небезопасное функционирование. Когда вы пытаетесь скопировать строку с помощью метода strcpy() в буфер, который недостаточно велик, чтобы содержать его, это вызовет переполнение буфера.

strcpy_s() - это улучшенная версия безопасности для strcpy(). С помощью strcpy_s вы можете указать размер буфера назначения, чтобы избежать переполнения буфера во время копирования.

char tuna[5];  // a buffer which holds 5 chars incluing the null character.
char salmon[] = "A string which is longer than 5 chars";

strcpy( tuna, salmon ); // This will corrupt your memory because of the buffer overflow.

strcpy_s( tuna, 5, salmon ); // strcpy_s will not write more than 5 chars.

Ответ 2

Я хотел бы добавить, что если вы когда-нибудь попытаетесь скомпилировать код других людей, MS всегда будет жаловаться на небезопасные функции в стандартной библиотеке. Просто определите _CRT_SECURE_NO_WARNINGS, как сообщает сообщение об ошибке, и MSVC будет работать как любой другой компилятор.