文章目录

  • 导论
  • 正文
    • strcmp()函数
    • 实例
      • 1.字符串比较
      • 2.字符串变量比较
      • 3.字符串数组比较
  • 结论

导论

在判断两个字符串的内容是否相等的时候,如果使用==,当两个字符串不是指向内存中同一地址时,那么即使这两个字符串内容一样,但是用==比较出来的结果也是 false。所以两个字符串在比较内容是否相等的时候一定要使用strcmp()


正文

strcmp()函数

为了便于大家的阅读和理解,在这里先简单的介绍下strcmp()函数

使用格式:

#include<string.h>
int strcmp(const char* s1,const char* s2);

当s1<s2时,返回为负数;
当s1==s2时,返回值= 0;
当s1>s2时,返回正数。

即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。如:
"A"<"C""d">"D""computer">"compare"

注意:

  • strcmp(const char *s1,const char * s2)只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
  • 不同编译器下,strcmp()函数返回的具体数值不同。

实例

1.字符串比较

#include<stdio.h>
int main()
{char ch1 = "hello";char ch2 = "hello";printf("%d\n", ch1 == ch2);
}

输出结果为1:说明字符串常量可以直接用==比较,若相等则返回1。

2.字符串变量比较

#include<stdio.h>
#include<string.h>
char *arr1 = "hello";
char arr2[] = "hello";if (arr1 == "hello")printf("1\n");if (arr2 == "hello")printf("2\n");if (strcmp(arr1, "hello"))printf("3\n");if (strcmp(arr2, "hello"))printf("4\n");
//输出结果是 1

为了更好的解释上述结果,我们更改一下代码:

int main()
{char *arr1 = "hello";char arr2[] = "hello";          //输出结果:printf("%d\n",arr1 == "hello");         //1printf("%d\n",arr2 == "hello");            //0//strcmp函数,判断相等则返回0printf("%d\n",strcmp(arr1,"hello"));   //0printf("%d\n",strcmp(arr2,"hello")); //0
}

说明:

  1. arr2 == "hello"是不成立的。字符串的比较不能用==

  2. strcmp(arr1,"hello")strcmp(arr2,"hello")都是成立的.

原因:

  1. 由于"hello"是字符串常量,编译器会进行优化:
    所有的"hello"都是相同的,整个程序中只需要有一个"hello"字符串。然后所有引用"hello"这个字符串的“指针变量”都赋值成相同的地址。所以:char *arr1 = "hello";定义后,arr1"hello"的地址是相同的。
  2. 对于:char arr2[] = "hello";,这里arr2并不是指针,类型里已经说明它是一个数组,所以这会是另一个内存地址,arr2与"hello"的地址是不同的。

3.字符串数组比较

int main()
{char arr1[] = "hello";char arr2[] = "hello";     //输出结果:printf("%d\n",arr1 == "hello");     //0printf("%d\n",arr2 == "hello");        //0printf("%d\n",arr1 == arr2);         //0//strcmp函数,判断相等则返回0printf("%d\n",strcmp(arr1,arr2));    //0
}

解释:

我们已经知道了,前两条语句输出结果为0的原因是因为==判断两边的地址不同,所以结果为0,同理,arr1和arr2在内存中存储的地址也不同,==在判断时,发现两边的地址不同,输出结果为0。


结论

  1. 如果是比较两个字符,则可以用==直接进行比较
  2. 字符串常量可以直接用==比较,若相等则返回1。
  3. 在比较两个字符串变量时不能利用符号====符号比较的是两个字符串的地址是否相等
  4. 比较==字符串数组的话,一定是不等的,因为他们的地址不同,此时就需要strcmp()函数进行比较

C语言中字符串用strcmp和==比较的问题相关推荐

  1. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题

    代码 总结下c语言中字符串数组的地址存放问题 #include <iostream> using namespace std; #include<bits/stdc++.h>i ...

  2. Go语言中字符串的查找方法小结

    这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下 1.func Contains(s, substr string) ...

  3. [工具]-C语言中字符串的形式打印16进制数据

    C语言中字符串的形式打印16进制数据. 这样写,输出更直观些 #define PRINT_BUF_MAX (32) #define TAG_STRING_MAX (32) static void pr ...

  4. c语言中字符 12是多少,c语言中字符串的讲解(DOC可编).doc

    c语言中字符串的讲解(DOC可编).doc 第一部分:字符串的概念 ---字符串:用双引号引起来的一串字符.在C语言,系统将自动的为字符串添加一个结束标志\0 ,该结束标志不作为字符串的实际长度,但作 ...

  5. C语言中字符串的处理方式(一)

    写多了 Java 代码,对 String 类 很是喜爱,可惜经典的 C 语言没有...最近在做程序过程中,发现对C语言字符串的处理很模糊,一会儿用数组,一会儿用指针,一会儿又引入 string.h.. ...

  6. C语言中字符串的处理方式

    http://www.cnblogs.com/robin-ty/archive/2010/09/03/1817294.html 交流纽带" --<C语言程序设计 现代方法> 写多 ...

  7. C语言中字符串和字符数组的区别

    C语言中字符串和字符数组的区别 1.基本概念 2.代码分析 3.总结 1.基本概念 字符串和字符数组很相似,但是有本质上的区别. (1) C语言中,字符串是双引号括起来的单个或多个字符的集合,编译器自 ...

  8. 有关C语言中字符串入栈的理解

    C语言中字符串的入栈 写在前面 对于C语言中变量入栈的顺序实际上需要具体情况具体分析,不同操作系统下的编译器可能对此有不同的解释,即使对于同一个C的编译器而言,参数设定的不同也会导致编译器调整局部变量 ...

  9. c语言字母转换数字代码,实现c语言中字符串和数字的相互转换的代码

    实现c语言中字符串和数字的相互转换的代码 引导语:代码就是程序员用开发工具所支持的语言写出来的源文件,是一组由字符.符号或信号码元以离散形式表示信息的明确的'规则体系.以下是百分网小编分享给大家的实现 ...

最新文章

  1. python中关于sqlite3数据库更新数据的使用
  2. p40 升级鸿蒙,等了这么久,我的P40终于可以升级鸿蒙系统了
  3. “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。
  4. 使用python用什么软件-Python读写Excel表格,就是这么简单粗暴又好用
  5. IO流以及他们的种类区别 序列化反序列化 如何实现
  6. if you can not make a solid foundation
  7. 563. 二叉树的坡度
  8. 载:看了你能懂几个?
  9. mysql设置字段为空字符串_mysql数据类型字段插入空字符串自动填充为0报错
  10. Standard C Episode 1
  11. 3认证老外主任_首批18款App认证名单公布 未来将开展数据安全管理认证
  12. 入手Kindle 2
  13. uniapp H5 调用高德地图导航
  14. 中小学计算机创新教育措施,小学信息技术教学论文计算机教学中的创新教育.docx...
  15. org.eclipse.core.runtime.CoreException: Plug-in org.eclipse.jdt.ui was unable to load class org.ecli
  16. 为什么要使用工作流引擎
  17. python中的get函数什么意思_详解python中get函数的用法(附代码)
  18. 跟着老万学linux运维-vi编辑器中的大小写转换技巧
  19. redis+lua脚本
  20. 高博SLAM十四讲书本程序学习——第3讲 三维空间刚体运动

热门文章

  1. 杨白劳 or 黄世仁
  2. 计算机毕业设计(附源码)python英语四六级在线学习系统
  3. iOS中调用短信、电话、邮件、Safari浏览器API
  4. 看雪3万课程笔记-Frida 辅助分析ollvm字符串加密(二)
  5. centos离线配置yun源
  6. HTML基本知识和常用的标签
  7. 电脑桌面右键无新建选项
  8. html5css游戏,HTML5/CSS3 迷你赛车游戏
  9. 第九章 python 字典(Dict)
  10. Spring Security Web : FirewalledResponse 经过防火墙加强安全的响应