내가 주에 다음 코드를 작성 : 이제이
int main{
Employee *employee1 = NULL;
char *empName1=NULL;
char *workHours[7];
for (int ii=0;ii<7;ii++)
{
workHours[ii] = new char[5];
}
if (empName1 != NULL) {delete empName1;}
empName1 = new char[y_str-x_str];
// I read "workHours[ii]" from the stdin using strncpy
// here There's a block of code that is irrelevant to my question...
//......
//..
employee1 = new Employee(empName1,y_int,workHours);
}
을, 직원은 여기에, "직원"라는 클래스의 생성자 클래스이다 :
class Employee {
public:
Employee(const char* employeeName, int salary, const char** workingHours);
char* getName();
int getSalary();
int calcWeeklySalary();
virtual ~Employee();
private:
char name[MAX_LINE_SIZE];
int empSalary_;
char* workHours[7];
};
그리고 생성자의 구현 :
Employee:: Employee(const char* employeeName, int salary, const char** workingHours)
{
int i=0;
strcpy(name,employeeName);
empSalary_=salary;
for(i=0; i<7; i++)
{
strcpy(workHours[i] ,workingHours[i]);
}
}
내가 "직원"을 "이름"(A priva에서 문자열을 복사 할 te 변수), "workingHours [i]"에서 "workHours [i]"(클래스의 private 클래스)까지, strcpy를 사용하여 볼 수 있습니다. strcpy 2 번째 파라미터는 알려진대로 const char *이어야합니다.
제 질문은 : 제가 한 일은 합법적입니까? 제 말은 "employee"가 char *이고 "workingHours"가 char **이고, Employee의 서명에서 "const"를 썼습니다.
그렇다면 다른 방법으로 클래스의 private 변수에 Employee의 매개 변수 (main에서 보낸)의 문자열을 복사 할 수 있습니까?
왜 그것을 컴파일하려고하지 컴파일러가 합법적인지 여부를 알려주지? 심지어 코드를 작성한 사람도 있습니다. 코드를 작성하는 것보다 질문을 작성하는 것이 더 많은 일입니다. 'C++ '로 문자열을 처리하고 옵션을 가지고 있다면'std :: string'의 사용을 권장하는 것이 좋습니다. 그들은 ansi c 스타일 문자열 IMO보다 사용하기에 더 친숙합니다. – luk32
포인트의 내용을 업데이트하지 않으려 고하지 않기 때문에 괜찮습니다. – michaeltang
@ luk32 글쎄, 맞았어야 했어! 하지만 지금 사용하고있는 컴파일러에 문제가 있습니다. 그리고 나는 그 사이에 시간을 낭비하고 싶지 않았다! – user2750466