cout腐败的char *

时间:2013-03-10 13:10:10

标签: c++ char garbage

我已经编写了一个代码来打印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印刷的垃圾。

2 个答案:

答案 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;
}