这是我的代码的一部分:
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。我做错了吗?
这是我的代码的一部分:
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。我做错了吗?
收集一堆评论并整合(为什么你们评论员不回答?):
您实际上正在做的是将指针值tab[i]
从分配的内存更改为temp
. 这是一个坏主意,因为temp
一旦它被破坏就会释放它。
据我所知,你根本不需要temp
。
解决此问题的 C 方法是使用strcpy(tab[i], oss.str().c_str())
which 将一一复制字符。请注意,您当前的代码会这样做,new char[80]
因此如果您的字符串长度超过 79 个字符,它将溢出。如果您必须使用new
'd 缓冲区,请使用类似new char[oss.str().size() + 1]
解决此问题的 C++ 方法是使用数组std::string
而不是char*
. 然后你可以分配,就像tab[i] = oss.str()
它会正确复制它。它还会清理数组超出范围时使用的内存,因为您的代码现在不这样做。