【发布时间】:2011-06-28 06:37:55
【问题描述】:
CString 有一个奇怪的问题我有以下代码,它给出了意外的结果:
CString sourcePath = _T("C:\\some\\path\\file.ext");
CString log;
log.Format(_T("Path = %s"), sourcePath);
结果字符串显示Path = (null)。
我不确定那里发生了什么,我尝试将 sourcePath 转换为 LPCTSTR 并获得了一个有效的指针,并且在 MSVC 的内存视图窗口中查看该内存地址的内容时一切似乎都有效。
这让我很恼火,因为我在以前的项目中尝试过相同的方法,而且效果很好。
谢谢。
附:请在人们开始在这里评论之前询问CString 是什么,就像我之前的帖子中发生的那样,请先检查这里:MSDN CString
编辑:对斜线的事情感到抱歉..是的,原始代码确实有双斜线..
【问题讨论】:
-
此示例不会在此处重现问题。您是否检查过可能影响 sourcePath 的缓冲区溢出?这是您的文字代码,还是在您显示的 3 行之间发生了其他事情?
-
@Erik,我刚刚使用 Visual Studio 2010 和 Visual Studio 2008 对此进行了测试,但也无法重现该问题。中间肯定有其他代码在运行。
-
遇到了同样的问题。哦,是的,我有一些使用 MFC 的旧项目;) VS2012 和 VS6 可以重现此问题。我的格式字符串是“some text %s, some text: %d, %d, %s text %s”。第一个字符串没问题,但第二个和第三个不是 - 只有“(null)”。所以我把这个巨大的格式字符串分成两个更小的,现在看起来不错。添加了第三个字符串,但没有格式。每个格式字符串一个 %s。
标签: c++ visual-studio mfc c-strings