strcmp: 用于比较两个字符串,原型如下:

int strcmp ( char const *s1, char const *s2);
如果s1小于s2,strcmp函数返回一个小于零的值。如果s1大于s2,函数返回一个大于零的值。如果两个字符串相等,函数就返回零。

警告:初学者常常会编写下面这样的表达式
         if ( strcmp (a, b))
    他以为如果两个字符串相等,它的结果将是真。但是,这个结果将正好相反,因为在两个字符串相等的情况下返回值是零(假)。 把这个返回值当作布尔值进行测试是一种坏风格,因为它具有三个截然不同的结果:小于、等于和大于。 所以更好的方法是把这个返回值与零进行比较。

当然我们在实际工作中也经常会碰到将其返回值与布尔值进行判断,我们来看下面这个例子:

char a[];
   ……
if ( !strcmp( a, "5"))
   {   printf(“equally!”);
   }else{
       printf("unequal!");
   }

在这个例子中我们分析下:
如果a的值为5,则返回值为0,那么判断也就成为 if(!(0)) ,(0)取反后为1 ,1位TRUE则判断为 if( TRUE )
如果a的值小于5,则返回一个负数,而负数的取反是FALSE; 大于5,则返回一个正数,正数的取反也是FALSE; 
因此上例中a 的值为5 则输出 equally ; 不等于5都输出 unequal

我们可以做一个小测试 -1 、 0 、 1三数分别取反,会得到 0、1、0 。

标准并没有规定用于提示不相等的具体值。它只是说如果第一个字符串大于第二个字符串就返回一个大于零的值,如果第一个字符串小于第二个字符串就返回一个小于零的值。一个常见的错误是一位返回值就是1和-1,分别代表大于和小于。这个假设并不总是成立。 (跟具体的编译器有关)

转自:http://piao8163.blog.163.com/blog/static/96972478200981343957704/

strcmp返回值布尔类型的判断的更多相关文章

  1. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

    方法的重写Overriding和重载Overloading是Java多态性的不同表现.重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现.如 ...

  2. 方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型

    方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表 ...

  3. malloc 返回值的类型是 void *

    malloc 返回值的类型是 void *,所以在调用 malloc 时要显式地进行类型转换,将 void * 转换成所需要的指针类型. #include <iostream> using ...

  4. Overloaded的方法是否可以改变返回值的类型

    摘要: 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同) Overload是重载的意思,Override是覆盖的意思,也就是重写. 重载 ...

  5. Override和Overload差别,Overloaded的方法能否够改变返回值的类型?

    Overload是重载的意思, Override是覆盖的意思,也就是重写. 重载Overload表示同一个类中能够有多个名称同样的方法,但这些方法的參数列表各不同样(即參数个数或类型不同). 重写Ov ...

  6. Overload重載和Override重写的区别。Overloaded的方法是否可以改变返回值的类型?

    Overload是重载的意思,Override是覆盖的意思,也就是重写. 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Ove ...

  7. java matlab混合编程之返回值Struct类型

    java matlab混合编程的时候当返回值是Struct类型(matlab中的返回类型)如何来取得(java中)其值? 上网找,看到这个网页:http://www.mathworks.cn/cn/h ...

  8. 转:环绕通知返回值 object 类型

    遇到 AOP 环绕通知报错  “return value from advice does not match primitive return type for: public boolean” 百 ...

  9. JS基础_返回值的类型

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

随机推荐

  1. php中mb_strlen,mb_substr根据中文长度截取字符串

    大于8截取,小于等于则不截取. 结合thinkphp模板引擎规则,代码如下: <,,'utf-8'}..<else/>{sh:$vo.name}</if> 这里if中的函 ...

  2. 操盘策略:KDJ三线合一 必定孕育大牛股

    日周月KDJ指标三周期合一是孕育大牛股的必要条件: 炒股看一下周.月线十分有必要,很多时候,周.月线已经死叉下行,中长线趋势走坏,但日线偏偏发出金叉,K线也走好,量价配合也好,而此时介入,多数情况下就 ...

  3. jQuery笔记——基础知识

    jQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一整套定义好的方法.在jQuery程序中,不管是页面元素的选择.内置的功能函数,都是美元符号“$”来起 始的.而这 ...

  4. kafka集群配置和java编写生产者消费者操作例子

    kafka 安装 修改配置文件 java操作kafka kafka kafka的操作相对来说简单很多 安装 下载kafka http://kafka.apache.org/downloads tar ...

  5. 1.1.Task Queue

      任务队列是一种跨线程.跨机器工作的一种机制.   任务队列中包含称作任务的工作单元.有专门的工作进程持续不断的监视任务队列,并从中获得新的任务并处理.   celery通过消息进行通信,通常使用一 ...

  6. DRF之REST规范介绍及View请求流程分析

    编程是数据结构和算法的结合,而在Web类型的App中,我们对于数据的操作请求是通过url来承载的,本文详细介绍了REST规范和CBV请求流程. 编程是数据结构和算法的结合,小程序如简单的计算器,我们输 ...

  7. SMO是英文SQL Server Management Objects的缩写(上一篇文章的补充)

    最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQL CLR/SSIS等方面的知识,在国内这方面的文章并不多见, ...

  8. BurpSuite—-Sequencer模块(定序器)

    一.简介 Burp Sequencer是一种用于分析数据项的一个样本中的随机性质量的工具.你可以用它来测试应用程序的session tokens(会话tokens)或其他重要数据项的本意是不可预测的, ...

  9. 数据库与vs的连接

    新建一个MFC基于对话框的项目后,更改属性, 其中需要将include(里面都是MySQL的头文件)lib是库文件,将.dll放入与.exe同级目录下,或放入系统里(c:\windows\system ...

  10. Unity调试设置

    [Unity调试设置] 1.Mac中,"Unity"->"Preferences...". Windows中,"Edit"->& ...