[英]Programming In C and Win32 API: Comparing Strings
我正在用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);
我正在將其值提取到名為username的字符串中。
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 ++使用chars數組,並且此語法僅比較每個數組的地址(不匹配)。
而是使用strcmp()
或_tcscmp()
。
我相信您實際上需要使用wchar_t(寬字符)。 自從我看過語法以來已經有一段時間了,但是我認為它將是這樣的:
wchar_t * c_user = L“ foo”;
如果(wcscmp(username,c_user)== 0)...
確保用戶名也定義為正確的類型。
您可能還會研究TCHAR,它是字符類型的更通用表示形式(它會根據編譯器設置進行更改)。 根據設置,它會是char或wchar_t我認為。
寫入username == c_user
檢查它們是否都指向相同的內存位置。
您需要調用strcmp
來比較字符串的值。
我會用strcmp(或任何同義詞)
if ( strcmp( username, c_user) == 0 )
{
// 0 indicate there is no difference, thus equal
}
else
{
}
您應該為此使用strcmp,如果要忽略大小寫,則應使用strcmpi。
如果(strcmp(用戶名,c_user)== 0){...}
使用功能GetWindowTextA()和MessageBoxA(),它對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.