增量后ostringstream获取错误的int值[c ++]

时间:2015-10-22 19:27:44

标签: c++ stringstream ostringstream

这是我的代码的一部分:

for(int i=0; i<10; i++)
{
    tab[i]=new char[80];
    oss.str("");
    oss<<"line number: <<i;
    temp=oss.str();
    tab[i]=(char*)temp.c_str();
}

当我打印标签时,结果是在第8和第9行。我做错了吗?

1 个答案:

答案 0 :(得分:2)

收集一些评论并加以巩固(为什么评论员不回答?):

您实际在做的是将tab[i]的指针值从已分配的内存更改为内部字符串temp。这是个坏主意,因为temp会在破坏后立即释放内存。

据我所知,您根本不需要temp

解决此问题的C方法是使用strcpy(tab[i], oss.str().c_str())逐个复制字符。请注意,您当前的代码执行new char[80],因此如果您的字符串超过79个字符,它将溢出。如果您必须使用new'缓冲区,请使用new char[oss.str().size() + 1]

之类的内容

解决此问题的C ++方法是使用std::string数组而不是char*数组。然后你可以像tab[i] = oss.str()一样分配,它会正确地复制它。它还会清理当阵列超出范围时使用的内存,因为你的代码现在没有。