WIN32编辑框文本传参数据不一致

//WIN32编辑框文本传参到另一个cpp里处理数据,但参数传输错误,代码如下
TCHAR name[] = {0};
TCHAR password[] = {0};

case WM_COMMAND:
        switch (LOWORD(wParam)) {
        case ID_LOADBUTTON:
            GetWindowText(LoadText,name,MAX_SIZE);//编辑框输入后这里name得到数据正确,例如传入admin
            GetWindowText(PassText, password, MAX_SIZE);
            if (CheckLoad(name, password)) {//name传到这个方法后name变成a123不知道为什么会不一致,后面附CheckLoad方法
                //测试
                char *createSystem = "创建学生系统窗口";
                WriteConsole(g_hOutput, createSystem, strlen(createSystem), NULL, NULL);

            }
            else {
                MessageBox(hWnd, "infor", "账号或密码错误", MB_OK);
            }
            
            
            break;
        }
        break;
...
bool CheckLoad(TCHAR *name, TCHAR *password) {
    if (*name == L'admin' &&*password == 123) {
        return true;
    }
    return false;
}

在 CheckLoad 方法中比较字符串内容的方式是错误的,应该使用字符串比较函数进行比较。此外,字符串 "admin" 和数字 123 都应该用字符串形式传入,而不是直接使用数字和字符常量。

TCHAR name[MAX_SIZE] = {0};
TCHAR password[MAX_SIZE] = {0};

case WM_COMMAND:
    switch (LOWORD(wParam)) {
    case ID_LOADBUTTON:
        GetWindowText(LoadText, name, MAX_SIZE);
        GetWindowText(PassText, password, MAX_SIZE);
        if (CheckLoad(name, password)) {
            char *createSystem = "创建学生系统窗口";
            WriteConsole(g_hOutput, createSystem, strlen(createSystem), NULL, NULL);
        }
        else {
            MessageBox(hWnd, "账号或密码错误", "infor", MB_OK);
        }
        break;
    }
    break;

bool CheckLoad(TCHAR *name, TCHAR *password) {
    if (_tcscmp(name, L"admin") == 0 && _tcscmp(password, L"123") == 0) {
        return true;
    }
    return false;
}

注意,我还做了以下更改:

在定义 name 和 password 数组时,为了确保数组中有足够的空间存储编辑框中的文本,使用了 MAX_SIZE 常量。
在 CheckLoad 方法中,使用了 _tcscmp() 函数进行字符串比较。
在 MessageBox 函数中,将 "infor" 和 "账号或密码错误" 的位置颠倒,以符合函数的参数顺序。

该回答引用ChatGPTᴼᴾᴱᴺᴬᴵ

在你的代码中,CheckLoad 函数有两个问题。

首先,使用 name 和 password 来比较字符串是不正确的。name 表示指向 name 缓冲区的第一个字符的指针,而不是字符串本身。同样,password 表示指向 password 缓冲区的第一个字符的指针。要比较两个字符串,应该使用 lstrcmp 函数(在 Windows API 中定义)或 std::wcscmp 函数(在 C++ 标准库中定义)。

其次,L'admin' 是单个字符,而不是一个字符串。正确的字符串常量应该是 L"admin",它是由字符数组构成的。

因此,你可以将 CheckLoad 函数修改为如下所示:

bool CheckLoad(TCHAR *name, TCHAR *password) {
    if (std::wcscmp(name, L"admin") == 0 && std::wcscmp(password, L"123") == 0) {
        return true;
    }
    return false;
}

这个版本的 CheckLoad 函数使用 std::wcscmp 函数来比较两个字符串,并且使用正确的字符串常量来初始化字符串。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^