2014-11-01 736 views
0

我正在試圖通過s2來使測試通過。如何將一個char數組與unsigned char數組進行比較?

我將可打印字符與無符號字符值一起存儲到s3中。

s2是一個測試字符串結果,旨在驗證可打印字符在s3中正確加載。

#include <stdio.h> 
#include <string.h> 

#define test_string_len 2 

union { 
    char unsigned us[test_string_len]; 
    char   s1[test_string_len]; 
} result; 

main() { 

    char *s2; 
    s2= "ab";   

    char unsigned s3[test_string_len];   
    s3[0] = 'a'; 
    s3[1] = 'b';  
    s3[2] = '\0'; 

    memcpy (result.us, s3, test_string_len);     

    if (result.s1 == s2) { 

      printf("Pass\n"); 
    } 

    printf("s2 = %s\n", s2); 
    printf("s3 = %s\n", s3); 
    printf("result.s1 = %s\n", s3); 
    printf("result.us = %s\n", result.us); 

    getchar(); 
} 
+2

'test_string_len'應該是'3',你需要兩個字節的字符串以及末尾的空字符'\ 0'。這不是你的問題,但會讓你的代碼更加正確。 – Bert 2014-11-01 17:51:35

+0

如果你只是試圖讓函數停止抱怨有符號和無符號字符的問題,那麼你可能正在尋找一個強制轉換'(char *)'而不是聯合。 – ooga 2014-11-01 18:21:37

回答

4

這是不可能與==在C.比較字符串(或其它陣列)這是因爲,如int myarray[8];可基本上被認爲是一個指針稱爲myarray存儲第一元素的地址的數組。換言之,==將比較陣列的起始地址,而不是指向實際陣列項目的內容

相反,您必須使用strcmpmemcmp函數,或使用循環遍歷每個索引並檢查每個數組中的值是否匹配。

+0

非常感謝。我收到 * result.s1 == * s2 這是否被認爲是錯誤的編碼習慣? – OneArb 2014-11-01 21:39:39

+1

這等同於'result.s1 [0] == s2 [0]',即它只是比較每個字符串的第一個字符。 – GoBusto 2014-11-01 21:41:42

2

您需要更改您的代碼,如下所示。

if(!strcmp(result.s1,s2)) { 

      printf("Pass\n"); 
    } 
+0

感謝您的確切代碼! – OneArb 2014-11-01 21:40:14

相關問題