Я хотел бы знать, могу ли я смело заменить strcpy_s, определенный здесь https://msdn.microsoft.com/en-us/library/td1esda9.aspx — (с двумя аргументами) с определенным здесь strcpy http://en.cppreference.com/w/c/string/byte/strcpy — (первый). Если нет, то какая версия ближе всего зЬгсру что я могу использовать для замены strcpy_s?
Добавлен стандарт C11 проверенные функции в том числе strcpy_s()
. Так что, если вы беспокоитесь о переносимости, это нормально, если у вас есть C11-совместимый компилятор. Обратите внимание, что «обработчик ограничений» стандарта C11 немного отличается от «обработчика недопустимых параметров» в Microsoft CRT, поэтому при установке пользовательского обработчика могут потребоваться некоторые корректировки.
Что касается замены в целом, нет, вы не можете безопасно заменить его на strcpy()
по причинам, которые должны быть очевидны: strcpy()
не ограничено. Вы должны будете либо сделать свою собственную проверку границ, используя strlen()
или используйте strncpy()
, но обратите внимание, что strncpy()
ведет себя по-разному (в частности, если исходная строка слишком велика, чтобы поместиться в месте назначения, буфер назначения не будет иметь нулевое окончание).
Других решений пока нет …