私は何か間違ったことをしたと確信していますが、私の一生の間、私は何を理解することができません!次のコードを検討してください。
cerr<<el.getText()<<endl;
cerr<<el.getText().c_str()<<endl;
cerr<<"---"<<endl;
const char *value = el.getText().c_str();
cerr<<"\""<<value<<"\""<<endl;
field.cdata = el.getText().c_str();
cerr<<"\""<<field.cdata<<"\""<<endl;
el
XML要素でありgetText
、std::stringを返します。予想通り、同じ値を出力しますel.getText()
。el.getText().c_str()
ただし、の結果を割り当てた場合は、-、つまり空の文字列-にvalue
設定されます。このコードはsetのために書かれていたので、それをクリアしていました。と思われる同じ式に変更すると、から設定され、正常に動作し、最後の行に期待値が出力されます。""
c_str()
field.cdata=value
value
はスタック上にあるのでel
、私はそれを壊していたのではないかと思いましたが、value
が設定された後でも、の基になる値el
はまだ正しいです。
私の次の考えは、constポインターへの割り当てに関して、コンパイラー固有の奇妙な問題があるということでした。そこで、次のように書きました。
std::string thing = "test";
std::cout << thing << std::endl;
std::cout << thing.c_str() << std::endl;
const char* value = thing.c_str();
std::cout << value << std::endl;
さすがに「テスト」を3回受けます。
だから今、私は何が起こっているのか分かりません。私のプログラムでは、サンプルでは発生していない奇妙なことが起こっていることは明らかですが、それが何であるかはわかりません。また、見続ける方法についてのアイデアがありません。誰かが私を啓発することができますか、または少なくとも私を正しい方向に向けることができますか?