これは何が問題なのですか?std :: string値をCListBoxに追加すると、gbberishとして終了する
void CMFCApplication1Dlg::OnBnClickedOk()
{
std::vector<std::string> vectorList;
try
{
CMSAToolsLibraryWrapper wrapper;
__int64 lResult = wrapper.SetDatabasePath(std::string("d:\\Test.xml"));
__int64 iNumPublishersRead = 0;
if (wrapper.ReadPublisherData(iNumPublishersRead))
{
vectorList = wrapper.GetPersonnelNames(true);
for (std::string& strName : vectorList)
{
m_lbNames.AddString((LPCTSTR)strName.c_str());
}
}
}
catch(_com_error *e)
{
AfxMessageBox(_T("Problem"));
}
//CDialogEx::OnOK();
}
私はAddString
呼び出しにブレークポイントを配置する場合strName
値が正しいです。しかし、私のCListBox
は漢字で終わる。どうして ?
'OnBnClickedOk'関数が復帰し、' vectorList'変数がスコープから外れ、すべての含まれている文字列と共に破壊されたときを考えてみましょう。ポインターはどこを指していますか? –
@Someprogrammerdudeしかし、私はCListBoxに値を設定しています。それらをコピーしないのですか?以前はそれについて心配する必要はありませんでした。たとえば、私は 'AddString(_ F(" Fred "))'を実行している可能性があります。 –
文字列リテラルはスコープから外に出ることはありません。その生涯はフルプログラムと同じです。そのため、どこにでもポインタを使用できます。リストボックスの問題については、実際の文字列をコピーするとは思っていませんが、わかりません。もしそうであれば、何も言わないようです。ベクタをクラスのメンバ変数にするか、そうでなければ破壊されないことを確認したら、それは動作しますか? –