c - 用 C 和 Win32 API 编程 : Comparing Strings

标签 c string winapi comparison char

我正在用 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!但是,输出仍然没有改变。查看输出(和代码中的比较): enter image description here

最佳答案

C 和 C++ 没有内置的字符串类型,因此您不能以这种方式比较字符串。 C 和 C++ 使用字符数组,此语法只是比较每个数组的地址(不匹配)。

改为使用 strcmp()_tcscmp()

关于c - 用 C 和 Win32 API 编程 : Comparing Strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5667651/

相关文章:

java - 在 Java 中连接两个字符串的最快方法是什么?

java - 计算字符串中的行数和单词数

C++:通过进程ID、进程句柄和标题名称从进程中获取唯一窗口的窗口句柄的最佳方法

c++ - 如何在线程中确定用户定义消息的优先级?

c - 为什么在macOS上用clang -O2编译C程序会出现 "empty"循环导致总线错误?

Java - 检查字符串是否包含 double 值的最快方法

c - 在 C 中一起使用 fscanf 和 fprintf

c++ - setsockopt 错误 WSAEADDRNOTAVAIL

c - Linux,如何在 GDB 中运行 c 代码之前等待几秒钟

C: strtof 返回 0.000,怎么了?