【问题标题】:How to compare LPCSTR如何比较 LPCSTR
【发布时间】:2012-11-10 03:25:32
【问题描述】:

我已经尝试过 strcmp 和 lstrcmp。我什至试图用 strlen 来做,但也没有用,这就是我所拥有的

void check(LPCSTR lpText)
{
    if( strmp(lpText, "test") == 0)
    {
        MessageBoxW(0, L"equal", 0, 0); 
    }
    else
    {
        MessageBoxW(0, L"not equal", 0, 0); 
    }
}

无论如何它总是返回 1,如果重要的话,设置中的字符集也设置为使用多字节字符集。

【问题讨论】:

  • 使用标准替换,工作:ideone.com/oZdhiA
  • 是的,你提到的这个设置很重要。统一使用 MBCS 或 Unicode,或者在混音时知道自己在做什么。
  • 感谢 @0xC0000022L,我将其改回 unicode 并且 lstrcmp 可以正常工作。

标签: c++ compare lpcstr


【解决方案1】:

如果您使用的是宽字符串,请尝试将其与宽字符串文字进行比较:

if (lstrcmp(lpText, L"test") == 0) {
    // stuff
}

编辑:您似乎使用了错误的字符编码。

【讨论】:

  • 它给了我这个错误:'lstrcmpA' : cannot convert parameter 2 from 'const wchar_t [6]' to 'LPCSTR'
  • @Furious:不要显式调用 *W 函数。在这里你也可以看到原因。如果您使用MessageBox 而不是MessageBoxW 并在预处理器中全局定义_UNICODE,它将按照H2CO3 的建议开箱即用! lstrcmpW 当然也可以在没有 _UNICODE 的情况下进行编译。
  • lpText 声明了 LPCSTR。它在参数列表中。
  • 抱歉给大家带来了困惑,我的错。从 MB 更改为 Unicode,现在可以使用了。
  • @Furious,Multibyte 已过时 - 除非您正在处理无法转换的旧代码库,否则不要使用它。
猜你喜欢
  • 2014-04-01
  • 2015-11-08
  • 2012-10-29
  • 2010-12-06
  • 2012-09-04
  • 2012-04-29
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多