字符串比较在 Visual C++ 2005 中不起作用

Posted

技术标签:

【中文标题】字符串比较在 Visual C++ 2005 中不起作用【英文标题】:String Compare not working in Visual C++ 2005 【发布时间】:2009-03-30 16:41:53 【问题描述】:

如果从注册表中得到一个 gring 并且当我将它放在消息框中时它会正确显示。 ::MessageBoxW(0, (LPCWSTR)achValue, _T("找到"), MB_YESNO);

该值存储在 ArchValue 中,它是一个 DWORD。我想要做的是将它与以下字符串“2.0.7045.0”进行比较,但 strcmp 无法为我工作。

任何关于如何做到这一点的想法都将不胜感激。 在 c++ 中相当垃圾,我无法像在 dll 中那样轻松调试。

非常感谢

托尼

【问题讨论】:

请贴一些实际代码。 【参考方案1】:

您需要使用 strcmp 的宽字符版本:wcscmp。

【讨论】:

【参考方案2】:

这个问题令人困惑;您在从注册表获取数据或执行 strcmp 时遇到问题?

您从注册表中得到一个 DWORD (???),应该类似于 "2.0.7045.0" ?你不确定它不是字符串 (REG_SZ) 吗?

如果可以从注册表中取出字符串,则应该可以进行字符串比较;请记住,如果字符串相等,strcmp(或其他类似的函数/方法)将返回 0(零)。

【讨论】:

【参考方案3】:

你有地狱般的弦乐混合。

MessageBoxW - 适用于 unicode 字符串。_T("Found") - 如果需要,添加 unicode 说明符的宏(来自项目设置中的定义)。LPCWSTR - unicode 字符串 (const wchar_t*)。 strcmp - 比较非 unicode 字符串。

您应该使用所有功能中的一种。 w 或 t 或非 unicode 字符串。

【讨论】:

以上是关于字符串比较在 Visual C++ 2005 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在安装时安装 Visual C++ Redistributables 2005

在 Visual Studio 2005 C++ 中设置文件版本号

Visual Studio 2005 C++ 编译器比 Visual Studio 6 编译器慢?

Visual Studio 2005 C++ 运行时新异常

如何为 Visual C++ 2005 安装 CPPUnit?

Visual C++和Visual Studio有啥区别,大学生用哪个比较好?