MFC CString格式给出了奇怪的行为

时间:2011-02-16 10:44:51

标签: c++ visual-studio mfc c-strings

CString我遇到了一个奇怪的问题我有以下代码会产生意想不到的结果:

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

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

我不知道在那里发生了什么,我已经尝试将sourcePath转换为LPCTSTR并获得了一个有效的指针,并在内存中查看该内存地址的内容时MSVC的查看窗口一切似乎都有效。

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

感谢。

P.S。请在人们开始在此处发表评论之前询问CString是什么,因为它发生在我之前的帖子中,请先在此处查看:MSDN CString

编辑:抱歉斜线的东西..是的,原始代码确实有双斜线..

4 个答案:

答案 0 :(得分:0)

您的sourcePath初始化存在问题。 字符\是C / C ++中的特殊字符。你应该用\替换它(双) 所以第一行代码应该是:CString sourcePath = _T(“C:\\ some \\ path \\ file.ext”);

希望这有帮助。

答案 1 :(得分:0)

正如您的MSDN CString链接所提到的那样,您无法将CString本身传递给Format函数。

使用:

  log.Format(_T("Path = %s"), sourcePath.GetString());

答案 2 :(得分:0)

字符串“C:\ some \ path \ file.ext”应为“C:\ some \ path \ file.ext” - 否则您将改为读取控制字符(\ s \ p \ f)。

答案 3 :(得分:0)

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

log.Format(_T("Path = %s"), (LPCTSTR)sourcePath);