2

我有一个奇怪的问题,CString我有以下代码,它给出了意想不到的结果:

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

结果字符串显示Path = (null).

我不确定那里发生了什么,我尝试将其转换sourcePath为 anLPCTSTR并获得了一个有效的指针,当在 MSVC 的内存视图窗口中查看该内存地址的内容时,一切似乎都是有效的。

这让我很恼火,因为我在以前的项目中尝试过相同的方法,而且效果很好。

谢谢。

PS 请,在人们开始在这里评论之前询问什么是 a CString,就像我之前的一篇文章中发生的那样,请先在这里查看:MSDN CString

编辑:对斜线的事情感到抱歉..是的,原始代码确实有双斜线..

4

4 回答 4

0

根据 MFC 版本以及您的应用是为 win32 还是 x64 构建的,您可能需要转换 CString:

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

您的 sourcePath 初始化有问题。字符 \ 是 C/C++ 中的特殊字符。您应该将其替换为 \ (double ) 所以第一行代码应该是: CString sourcePath = _T("C:\\some\\path\\file.ext");

希望这可以帮助。

于 2011-02-16T10:55:43.930 回答
0

正如您的 MSDN CString 链接还提到的,您不能将 CString 本身传递给 Format 函数。

利用:

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

字符串 "C:\some\path\file.ext" 应该是 "C:\some\path\file.ext" - 否则您将读取控制字符 (\s \p \f)。

于 2011-02-16T10:59:26.600 回答