C-在c里 if判定条件的疑问“a” != “a”

C-在c里 if判定条件的疑问“a” != “a”

泛泛之交 发布于 2017-03-23 字数 168 浏览 1118 回复 4
void main() {
if("a" == "a")
printf("Yes, equal");
else
printf("No, not equal");
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

瑾兮 2017-08-21 4 楼

在C语言里,字符用双引号括起来的时候就表示是字符串,而字符串是不支持关系运算符,因为C语言编译器在解析"a" == "a"时由于不支持字符串关系运算,就会将其分配的内存地址进行比较,由于它们的内存地址不相等,所以就会执行printf("No, not equal");

需要比较字符串还是用strcmp函数比较吧。

泛泛之交 2017-08-13 3 楼

用VC测试返回的是"Yes, equal",应该跟编译器的具体实现有关系吧。

虐人心 2017-06-19 2 楼

在c里,每个字符串是分配一个内存地址的,正如你代码里两个"a"其实分配不同的地址

 if(0x00403064 == 0x002D316A) // Two memory locations
{
printf("Yes, equal");
}

所以应该把==替换成strcmp

 if(strcmp("a", "a") == 0)
{
// Equal
}

想挽留 2017-05-19 1 楼

这样比较没有问题,输出应该是equal的,看一下反汇编代码:

if("a" == "a")
004113BE mov eax,offset string "a" (415820h)
004113C3 cmp eax,offset string "a" (415820h)
004113C8 jne main+43h (4113E3h)

VC和GCC都测试了,是相等的。