使用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, 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, \"Bar\", \"Foo\", 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(),它对我有用。     

要回复问题请先登录注册