这是我的代码的一部分:
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行。我做错了吗?
答案 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()
一样分配,它会正确地复制它。它还会清理当阵列超出范围时使用的内存,因为你的代码现在没有。