Я не могу понять в чем моя ошибка. Добавила "_s", не помогает. Появляется другая ошибка: Error C2660: 'strcpy_s': function does not take 2 arguments
public:
TGoods() : year_(0), name_(NULL)
{
}
TGoods(int year, const char *name): year_(year),name_(strcpy_s(new char[strlen(name) + 1], name))
{
}
Во-первых, функция strcpy_s в С++ может принимать два аргумента только в том случае, если ее первый аргумент - массив. У вас первый аргумент - не массив, а указатель. В такой случае аргументов придется передавать три: дополнительно придется передать размер буфера-приемника. Все это ясно описано в документации к функции strcpy_s. Неясно, почему вы пользуетесь незнакомой функцией strcpy_s и при этом даже не пытаетесь почитать документацию.
Во-вторых, использование функции strcpy формально ошибкой не является. Ваш компилятор сам сказал вам, как отключить это назойливое и странное сообщение об ошибке. Прямо там, в сообщении об ошибке вам сказано, что это можно сделать через определение макроса _CRT_SECURE_NO_DEPRECATE (и, заодно, _CRT_SECURE_NO_WARNINGS). Лучше всего это делать глобально, в настройках проекта
Project Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions
Ну все верно, на то она и безопасная, чтоб кроме как "куда", еще и проверять "сколько".
В вашем варианте я бы смело использовал strcpy - и так понятно, что вы выделяете достаточно памяти. Но если нет, то...
name_(nullptr) ...
{
strcpy_s(name_= new char[strlen(name) + 1], strlen(name) + 1, name));
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости