これは私のコードの一部です:
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())
、文字を 1 つずつコピーするを使用することです。現在のコードでは、new char[80]
文字列が 79 文字を超えるとオーバーフローすることに注意してください。'd バッファーを使用する必要がある場合はnew
、次のようにします。new char[oss.str().size() + 1]
これを修正する C++ の方法は、 の配列のstd::string
代わりに の配列を使用することですchar*
。次に、好きなように割り当てるだけで、tab[i] = oss.str()
それを適切にコピーできます。また、配列が範囲外になったときに使用されるメモリをクリーンアップします。これは、コードが現在行っていないためです。