【问题标题】:Make a condition on const wchar_t* [duplicate]在 const wchar_t* 上创建条件 [重复]
【发布时间】:2017-01-10 11:14:12
【问题描述】:

我怎样才能用 const wchar_t* 创建一个条件?我试过了 const wchar_t* password if (L"xyz" == password) {...} 但它不起作用

谢谢

【问题讨论】:

  • 比较内容而不是指针
  • 我想比较内容而不是指针
  • @A.Adil 那么,这样做吗?为了将来参考,“不工作”不是有用的问题描述。
  • 如上所述,您的代码只是比较变量的地址,因此您的 if (L"xyz" == password) 将始终失败。如果要查看文本是否相等,需要使用 wcscmp(L"xyz", password)。

标签: c++ pointers


【解决方案1】:

你应该看看wcscmp

const wchar_t* password = L"xyz";
if (wcscmp(password, L"xyz") == 0) {
    // Strings are identical
} 

【讨论】:

    【解决方案2】:

    当你在做L"xyz" == whatever(甚至是非宽版本,"xyz" == whatever)时,你是在比较指针,而不是字符串内容。

    例如假设您的变量password 存储在内存中的位置0x00100000,而常量L"xyz" 存储在位置0x00200000。当您使用L"xyz" == password 行执行相等测试时,它实际比较的是0x00100000 == 0x00200000,这显然永远不会是真的。

    您需要做的是使用库函数wcscmp 来比较宽字符串。但是,由于它被标记为 C++,因此您应该使用 std::wstring 和重载的 operator ==,除非您有理由使用 C 字符串。这可能是您感到困惑的地方:当使用std::stringstd::wstring 时,您可以使用== 来比较字符串,因为这些类重载了== 运算符,所以这段代码可以正常工作:

    #include <iostream>
    #include <string> 
    
    int main(int argc, char *argv[])
    {
        std::wstring wstr = L"Hello World";
        if(wstr == L"Hello World")
        {
            std::wcout << wstr << std::endl;
        }
        return 0;
    }
    

    顺便说一句,您真的不应该在程序中使用常量来存储密码,除非它们以某种方式加密。

    【讨论】:

      猜你喜欢
      • 2011-12-27
      • 1970-01-01
      • 2011-07-29
      • 2017-08-03
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      相关资源
      最近更新 更多