在没有语法错误的情况下,此代码中的if情况不起作用

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"情况确实非常有效,为什么?

Sou*_*osh 6

它不像第一种情况根本不起作用,它只是以一种无意的方式工作.

根据代码,

 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代码.从逻辑上讲,当您希望通过指针比较内存区域指针的内容时,此代码是无用的,没有任何意义.