Printf来自同一阵列的不同对象会产生意外结果?

时间:2014-04-29 22:18:31

标签: c++ printf

我设法将我的代码问题缩小到了:

class A{
    private:
        int a;
    public:
        A(){};
        A(int i){a=i;};
        const char* str(){
            std::stringstream ss;
            ss << this << "->" << a;
            return ss.str().c_str();
        };
};
int main(){
    A test[2] = {A(42), A(99)};

    printf("%s,%s\n",test[0].str(),test[1].str());
    printf("%s,",test[0].str());
    printf("%s",test[1].str());
    return 0;
}

令人惊讶的是,打印出这个:

0x7ffff5b574a0->42,0x7ffff5b574a0->42
0x7ffff5b574a0->42,0x7ffff5b574a4->99

为什么会这样?是printf故障吗?请赐教。

0 个答案:

没有答案