0
我已經厭倦了這樣的方法來比較字符串:在C.緩衝區一個字符串比較反對字符串文字
if(strcmp(buf, "AUTHENTICATE") != 0) {
我的緩衝區包含「認證」裏面串,你可以在調試器檢查看看。但結果是strcmp返回值不等於0.爲什麼?
我已經厭倦了這樣的方法來比較字符串:在C.緩衝區一個字符串比較反對字符串文字
if(strcmp(buf, "AUTHENTICATE") != 0) {
我的緩衝區包含「認證」裏面串,你可以在調試器檢查看看。但結果是strcmp返回值不等於0.爲什麼?
正如一個提醒,
strcmp
應該比較兩個字符串,字符由 字符,並返回只要2個字符是不同的。在這種情況下,該函數返回第一個ASCII值和第二個ASCII值 之間的差值 。如果符合\0
字符,則它是函數返回前字符串的最後一個計算的 字符。
我看到2個可能的原因,當你希望它返回0。
buf
是用戶輸入strcmp
將返回大於0的另一個值,它可能包含結束\n
,其字符串文字「AUTHENTICATE」不包含。 這取決於你如何處理輸入:你使用什麼函數,你是否將整個輸入存儲到buf
等...buf
不包含nul終止符。請注意,在這種情況下,buf
不是有效的字符串。請注意,strcmp
將繼續評估兩個字符串,直到找到\0
字符,這意味着如果buf
不包含一個字符,則在buf
中包含的最後一個字符被評估後,strcmp
將繼續讀取內存,您肯定不希望這些字符被讀取。
只是一個瘋狂的猜測:'buf'是否包含終止的''\ 0''字節?如果圖片中有任何重要信息,請在您的問題中以文字形式提供。 –
如果你比較空buf怎麼辦?你確認buf不是空的嗎? – LethalProgrammer
它包含。這個例子似乎現在起作用。我做了一些乾淨的,多次建立並開始工作。所以上面的代碼工作正常! –