2012-03-09 93 views
0

我想比較我的C程序中的字符串和LPCTSTR。strcmp比較LPCTSTR和字符串

這裏是我到目前爲止已經完成的(代碼已被簡化爲僅什麼問題):

DWORD main(DWORD ac, LPCTSTR *av) 
{ 
    DWORD cpt = 1; 

    while (++i < ac) 
    { 
     if (strcmp(av[i], "value")) 
      printf("1 : OK\n"); 
     else if (strcmp(av[i], _T("value"))) 
      printf("2 : OK\n"); 
     else if (strcmp(av[i], (LPCTSTR)"value")) 
      printf("3 : OK\n"); 
    } 
    return EXIT_SUCCESS; 
} 

當我執行我的程序與第一個參數「價值」,似乎沒有任何的if已驗證。我嘗試了strcmplstrcmp,但結果是一樣的。

有人可以告訴我我做錯了嗎?

謝謝。

+0

還要注意,如果定義了UNICODE,即LPCTSTR實際上是'const wchar_t *'(或'unsigned short *')而不是'const char *',那麼你的代碼就不會工作。無論如何,你應該使用Unicode編寫Windows應用程序。 – Rup 2012-03-09 12:34:38

回答

3

strcmp和家族返回0表示字符串相等。你的邏輯完全是錯誤的。

你應該寫這樣的測試:

if (strcmp(av[i], "value")==0) 

順便說一句,其他兩個if報表,與_T("value")(LPTSTR)"value"比較編譯爲ANSI時都很好,但對於編譯時不正確Unicode格式。編譯爲Unicode時,_T("value")將評估爲一個寬字符串,因此不是strcmp的有效參數。這是一個編譯錯誤。並且(LPTSTR)"value"也將是編譯錯誤,因爲LPTSTR將是一個寬字符串。但演員陣容也是完全虛假的。無論如何,我只是提到這些問題的完整性,但我確實明白,這些額外的if語句是在您嘗試調試根本問題時添加的。

+0

哦sh * t!我不知道爲什麼在我的腦海裏,strcmp返回1時,兩個字符串都是等於...謝謝;) – 2012-03-09 14:12:11