使用C和Win32 API进行编程:比较字符串

问题描述

|| 我正在用C和Windows API编写程序。我正在使用Visual Studio 2010 Express,并且“字符集”设置为“未设置”。我已经做了一个编辑控件来接受用户名。这里的声明:
hwnduser = CreateWindow (TEXT(\"EDIT\"),NULL,WS_VISIBLE | WS_CHILD | WS_BORDER,220,70,80,20,hwnd,(HMENU) 3,NULL);
我将其值提取到名为用户名的字符串中。
len = GetwindowTextLength(hwnduser) + 1;
GetwindowText(hwnduser,username,len);
现在,有效的用户名在名为c_user的字符串中:
char c_user[] = \"foo\";
当我比较它们以检查用户是否使用以下代码输入了有效的用户名时,
if (username == c_user)
{
  MessageBox(hwnd,\"Foo\",\"Bar\",MB_OK);
}
else
{
  MessageBox(hwnd,MB_OK);
}
它永远不会验证。而是始终执行else条件!我在哪里弄错了? 如何纠正呢? 我已经尝试过strcmp了!但仍然,输出不会改变。查看输出(和代码中的比较):     

解决方法

C和C ++没有内置的字符串类型,因此您不能以这种方式比较字符串。 C和C ++而是使用一个char数组,并且此语法仅比较每个数组的地址(不匹配)。 而是使用
strcmp()
_tcscmp()
。     ,我相信您实际上需要使用wchar_t(宽字符)。自从我看过语法以来已经有一段时间了,但是我认为它将是这样的: wchar_t * c_user = L \“ foo \”; 如果(wcscmp(username,c_user)== 0) ... 确保用户名也定义为正确的类型。 您还可以查看TCHAR,它是字符类型的更通用表示形式(它会根据编译器设置进行更改)。根据设置,我认为它可能是char或wchar_t。     ,写ѭ6会检查它们是否都指向相同的存储位置。 您需要调用ѭ7来比较字符串的值。     ,我会使用strcmp(或任何同义词)
   if ( strcmp( username,c_user) == 0 )
   {
       // 0 indicate there is no difference,thus equal
    }
    else
    {
    }
    ,您应该为此使用strcmp,如果要忽略大小写,则应使用strcmpi。     ,如果(strcmp(用户名,c_user)== 0) { ... }     ,使用功能GetWindowTextA()和MessageBoxA(),它对我有用。