cout поврежденный символ *

Я написал код для печати имени 2 рабочих, но вместо этого он печатает мусор.

cout << "highest salary: " << highestSalary.getID() << " " << highestSalary.getName() << endl;

cout << "hardest worker: " << mostHours.getID() << " " << mostHours.getName();

функция getName () определена в рабочем классе как:

char* Worker::getName()
{
char temp[20];

int i;
strcpy(temp, name);

return temp;
}

Проходя через это в отладчике, я попытался поместить значение самое высокоеSalary.getName () в ver char * temp, и это было то, что я ожидал, скажем, «bob», но после cout значение было «» и cout печатный мусор.

-8

Решение

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

Если это C ++, вы должны использовать строковый класс. Если по какой-то причине вы не конст правильно:

const char* Worker::getName() const
{
return name;
}
1

Другие решения

НЕТ НЕТ НЕТ, вы возвращаете указатель на локальную переменную функции. Вот почему он падает.

Сделайте это вместо этого:

std::string Worker::getName()
{
std::string temp(name); // not sure what type of name is...
return temp;
}

Не забудь #include<string>,

Теперь у вас есть настоящий C ++, а не C и указатели.

8