我正在尝试铸造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");
}