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
编辑:抱歉斜线的东西..是的,原始代码确实有双斜线..
答案 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);