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

Posted

技术标签:

【中文标题】在没有语法错误的情况下,此代码中的 if 情况不起作用【英文标题】:the if case in this code doesnt work while there is no syntax error 【发布时间】:2016-08-11 13:27:47 【问题描述】:
if(s.name=="kolkata")      

    printf("the details");

if(strcmp((s.name,"kolkata")==0) 

    printf("the details");

第一个'if' case没有语法错误仍然不起作用,而第二个'if' case确实很有效,为什么?

【问题讨论】:

你没有在第一个 if 情况下使用 strcmp,这就是原因。没有语法错误是必要的,但还不够。 因为第一个 if 语句比较对象和对象并且它们是不同的对象。第二个 if 是比较对象的内容。 因为第二个语句在语法上不正确。您从哪里获得第二个效率不高的“信息”?你从来没有运行过这段代码,所以你从来没有测量过它的性能,不是吗? 【参考方案1】:

这不像第一种情况根本不起作用,它只是以一种不打算的方式起作用。

根据代码,

 if(s.name=="kolkata")  

尝试比较指针本身。它不会通过这些指针比较内存位置指针的内容。

到了您所期望的地步语法错误,引用C11,第6.5.9 章,相等运算符的约束,(==)

两个操作数都是指向兼容类型的合格或不合格版本的指针;

所以,

if(s.name=="kolkata")  
从句法的角度来看,

是完全有效且合法的 C 代码。从逻辑上讲,当您期望通过指针比较内存区域指针的内容时,这段代码是无用的,没有意义。

【讨论】:

如果输入是“kolkata”,那么输出必须是“the details”。但事实并非如此。 您的实际代码是什么? if(strcmp((s.name,"kolkata")==0) 无法编译。 @HemanshuSaraf 如果您更改代码以打印 不同 消息,那么您就不会混淆当前打印哪些相同的消息,以及您明显的矛盾.

以上是关于在没有语法错误的情况下,此代码中的 if 情况不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥浮点数据类型在没有类型转换 4.7 的情况下在此代码中不起作用? [复制]

为啥这个 if 语句在这种情况下不起作用? [关闭]

如何在没有 if else 的情况下处理 Spring-MVC 项目中的错误?

是啥? JavaScript 中的语法是啥意思?

如何在没有错误的情况下制作if-else语句?

在 PHP5 存在的情况下删除 PHP 7 后 Apache2 不起作用