我已经编写了一个代码来打印2个工作人员的名字,但它会打印垃圾。
cout << "highest salary: " << highestSalary.getID() << " " << highestSalary.getName() << endl;
cout << "hardest worker: " << mostHours.getID() << " " << mostHours.getName();
函数getName()在worker类中定义为:
char* Worker::getName()
{
char temp[20];
int i;
strcpy(temp, name);
return temp;
}
在调试器上执行此操作我尝试将最高级别的getSalary.getName()置于ver char * temp中,并且该值是我预期的,让我们说“bob”,但是在cout之后值为“”和cout印刷的垃圾。
答案 0 :(得分:8)
NO NO NO,您正在返回指向本地函数变量的指针。这就是崩溃的原因。
请改为:
std::string Worker::getName()
{
std::string temp(name); // not sure what type of name is...
return temp;
}
不要忘记#include<string>
。
现在你有了真正的C ++,而不是C和指针。
答案 1 :(得分:1)
您正在传递指向局部变量的指针。一旦你的函数结束,这个变量就消失了。
如果这是C ++,你应该使用字符串类。如果由于某种原因你不这样做,至少是const correct:
const char* Worker::getName() const
{
return name;
}