2

CString予期しない結果をもたらす次のコードがあり、奇妙な問題が発生しています。

CString sourcePath = _T("C:\\some\\path\\file.ext");
CString log;
log.Format(_T("Path = %s"), sourcePath);

結果の文字列はを示しますPath = (null)

内部で何が起こっているのかわかりません。にキャストしsourcePathLPCTSTR有効なポインタを取得しました。MSVCのメモリビューウィンドウでそのメモリアドレスの内容を表示すると、すべてが有効であるように見えます。

以前のプロジェクトで同じ方法を試したので、これは私を苛立たせます、そしてそれはかなりうまくいきました。

ありがとう。

CStringPSお願いします、私の以前の投稿で起こったように、人々がここで何であるかについてコメントし始める前に、まずここをチェックしてください: MSDN CString

編集:スラッシュについて申し訳ありません..そしてはい、元のコードには二重スラッシュがあります..

4

4 に答える 4

0

MSDN CString リンクにも記載されているように、CString 自体を Format 関数に渡すことはできません。

使用する:

  log.Format(_T("Path = %s"), sourcePath.GetString());
于 2011-02-16T10:58:18.360 に答える
0

sourcePath の初期化に問題があります。文字 \ は C/C++ の特殊文字です。\ (double ) に置き換える必要があるため、コードの最初の行は次のようになります。 CString sourcePath = _T("C:\\some\\path\\file.ext");

お役に立てれば。

于 2011-02-16T10:55:43.930 に答える
0

文字列 "C:\some\path\file.ext" は "C:\some\path\file.ext" にする必要があります。そうしないと、代わりに制御文字 (\s \p \f) が読み取られます。

于 2011-02-16T10:59:26.600 に答える
0

MFC のバージョンと、アプリが win32 用にビルドされているか x64 用にビルドされているかによって、CString のキャストが必要になる場合があります。

log.Format(_T("Path = %s"), (LPCTSTR)sourcePath);
于 2011-02-17T17:43:45.243 に答える