簡體   English   中英

使用C和Win32 API進行編程:比較字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM