c – 为什么在C风格的字符串上使用==有效?

c – 为什么在C风格的字符串上使用==有效?,第1张

概述我的印象是没有为C风格字符串定义比较运算符,这就是我们使用strcmp()之类的东西的原因.因此,以下代码在C和C中是非法的: if("foo" == "foo"){ printf("The C-style comparison worked.\n");}if("foo" == "bob"){ printf("The C-style comparison produced t 我的印象是没有为C风格的字符串定义比较运算符,这就是我们使用strcmp()之类的东西的原因.因此,以下代码在C和C中是非法的:

if("foo" == "foo"){    printf("The C-style comparison worked.\n");}if("foo" == "bob"){   printf("The C-style comparison produced the incorrect answer.\n");} else {   printf("The C-style comparison worked,strings were not equal.\n");}

但我在使用GCC和VS 2015的两个Codeblock中测试了它,编译为C和C.两者都允许代码并产生正确的输出.

比较C风格的字符串是否合法?或者它是否是允许此代码工作的非标准编译器扩展?

如果这是合法的,那么为什么人们在C中使用strcmp()?

解决方法 编译器可以自由地使用字符串实习,即通过避免复制相同的数据来节省内存.比较相等的2“foo”文字必须存储在您的案例中的相同内存位置.

但是,您不应该将此作为规则. strcmp方法可以在所有情况下工作,而实现定义是否您的观察将与另一个编译器,编译器版本,编译标志集等保持一致.

总结

以上是内存溢出为你收集整理的c – 为什么在C风格的字符串上使用==有效?全部内容,希望文章能够帮你解决c – 为什么在C风格的字符串上使用==有效?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1223860.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存