c-如何强制转换char数组以将其与无符号char数组进行比较



我正在尝试铸造s2以使测试通过。

我将可打印字符和无符号字符值一起存储到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] = '';   
    memcpy (result.us, s3, test_string_len);                
    if ( result.s1 == s2)    {
            printf("Passn");
    }
    printf("s2 = %sn", s2 );
    printf("s3 = %sn", s3 );   
    printf("result.s1 = %sn", s3 );
    printf("result.us = %sn", result.us );
    getchar();
}

无法将字符串(或其他数组)与C中的==进行比较。这是因为像int myarray[8];这样的数组本质上可以被认为是一个名为myarray的指针,用于存储第一个元素的地址。换句话说,==将比较数组的起始地址,而不是所指向的实际数组项的content

相反,您必须使用strcmp或memcmp函数,或者使用for()循环遍历每个索引,并检查每个数组中的值是否匹配。

您需要按如下方式更改代码。

 if(!strcmp( result.s1,s2))    {
            printf("Passn");
    }

最新更新