Почему не дает использовать функцию strcpy()
Создал простой класс, что бы посмотреть различия между string и char. Почему то не дает использовать функцию strcpy() и приходится делать присваивание массиву через цикл for. Почему так? И еще, прошу оценить код. Задание было создать класс и написать 3 конструктора. Отредактировал.
Вот в данном участке кода, если добавить strcpy() компилятор VS 2019 выдаст ошибку
Ошибка C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Person::Person(const string& ln, const char* fn)
{
lname = ln;
strcpy(fname, fn);
}
А вот тут версия через цикл for и все работает. Почему так?
#pragma once
#include <iostream>
using namespace std;
class Person
{
private:
static const int LIMIT = 25;
string lname;
char fname[LIMIT];
public:
Person();
Person(const string& ln, const char* fn );
Person(const string& ln);
Person(const char* fn);
void Show();
void formalShow();
};
И непосредственно файл с описаниями методов этого класса:
#include "Person.h"
Person::Person()
{
lname = "Name";
fname[0] = 'S';
fname[1] = 'u';
fname[2] = 'r';
fname[3] = 'n';
fname[4] = 'a';
fname[5] = 'm';
fname[6] = 'e';
fname[7] = '\0';
}
Person::Person(const string& ln, const char* fn)
{
lname = ln;
for (int i = 0; i < strlen(fn); i++)
fname[i] = fn[i];
fname[strlen(fn)] = '\0';
}
Person::Person(const string& ln)
{
lname = ln;
fname[0] = 'S';
fname[1] = 'u';
fname[2] = 'r';
fname[3] = 'n';
fname[4] = 'a';
fname[5] = 'm';
fname[6] = 'e';
fname[7] = '\0';
}
Person::Person(const char* fn)
{
lname = "Name";
for (int i = 0; i < strlen(fn); i++)
fname[i] = fn[i];
fname[strlen(fn)] = '\0';
}
void Person::Show()
{
cout << "Name: " << lname << endl;
cout << "Surname: ";
for (int i = 0; i < strlen(fname); i++)
cout << fname[i];
cout << endl;
}
void Person:: formalShow()
{
cout << "Surname: ";
for (int i = 0; i < strlen(fname); i++)
cout << fname[i];
cout << endl;
cout << "Name: " << lname << endl;
}