Hem*_*raf -1 c string strcmp equality-operator
if(s.name=="kolkata")
{
printf("the details");
}
if(strcmp((s.name,"kolkata")==0)
{
printf("the details");
}
Run Code Online (Sandbox Code Playgroud)
第一个"if"情况没有语法错误仍然无法正常工作,而第二个"if"情况确实非常有效,为什么?
它不像第一种情况根本不起作用,它只是以一种无意的方式工作.
根据代码,
if(s.name=="kolkata")
Run Code Online (Sandbox Code Playgroud)
是尝试比较指针本身.它不会通过这些指针比较内存位置指针的内容.
到了预期语法错误的地步,引用C11,第6.5.9章,Equality运算符的约束,(==)
- 两个操作数都是指向兼容类型的限定或非限定版本的指针;
所以,
if(s.name=="kolkata")
Run Code Online (Sandbox Code Playgroud)
从语法的角度来看,它是一个完全有效且合法的C代码.从逻辑上讲,当您希望通过指针比较内存区域指针的内容时,此代码是无用的,没有任何意义.