目录

一、strlen 函数

二、strcpy 函数

三、strcmp函数

四、strerror 函数


这里仅列举出了部分需要注意的函数,至于其他的 strcat、strtok函数没有列举出来。

一、strlen 函数

strlen 函数用于获取一个字符串的长度。本质是用一个变量cnt计数,只要不是'\0',cnt++,地址也向后移动一个单位;一旦遇到 '\0',停止计数并返回计数结果。

函数声明如下:

1、形参返回值解析

形参:输入一个 char* 类型,相当于提供字符串首元素的地址

返回值:返回你输入的字符串的长度

2、函数特点

(1) strlen 返回字符串中 '\0' 前面出现的字符数

'\0' 作为字符串的结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )

char* str1 = "hello";    // 5,注意末尾有个隐藏的'\0'char str2[] = "hello";   // 5char str2[] = {'h','e','l','l','o','\0'};   // 5char str2[] = {'h','e','l','l','o','\0','a','b','c'};   // 5,一遇到'\0',函数就会返回char str2[] = {'h','e','l','l','o'};   // 长度不确定,因为没有'\0',因为数组不会自动补充

(2) strlen函数的返回值是无符号整型

strlen函数的返回值是size_t,即unsigned int

int main() {const char* pstr1 = "hello,world";const char* pstr2 = "hello";if (strlen(pstr2) - strlen(pstr1) > 0){printf("大于");}else{printf("小于等于");}return 0;
}

无符号整型相减的结果依然是无符号整型,但strlen(pstr2) - strlen(pstr1) 的结果是 -6,所以这个 -6 在比较大小的时候需要倾向于范围较小的那一方,即转换成无符号类型。

-6 在内存中的补码为 10000000 00000000 00000000 00000110,现在要当作无符号来看,即所有的位置都是有效位,转换成原码就是

01111111 11111111 11111111 11111010

很显然这个数是 大于 0的,所以打印的结果是“大于”

二、strcpy 函数

strcpy函数 将源字符串里的所有字符(包括'\0')逐个拷贝到目标空间。拷贝时一旦遇到‘ \0 ’,此时会中止拷贝,先把'\0' 拷贝到目标地址, 然后再返回目标地址。

函数声明如下:

1、形参返回值解析

第一个参数:目标空间的地址,可以是一个数组首元素的地址,也可以是malloc出来的地址

第二个参数:源字符串首元素的地址

返回值:返回目标空间的地址

2、函数特点

函数有以下两点需要注意:

  • strcpy 函数会将源字符串中的 '\0' 拷贝到目标空间
  • 目标空间必须足够大,以确保能放下源字符串

3、函数使用

int main() {char src[20] = { 'h','e', 'l', 'l', 'o', '\0','a','b','c' };char dst[20];strcpy(dst, src);return 0;
}

这也从侧面证实了,strcpy 遇到'\0' 会停止拷贝,但是会把'\0'拷贝到目标空间。

三、strcmp函数

strcmp 函数可以比较两个字符串的大小。本质上是逐字节比较,即便是比较汉字,一个汉字占2个字节,也是先将汉字存到内存,然后逐字节比较。

函数声明如下:

1、参数返回值解析

参数介绍:输入的是需要用来比较的两个参数,可以是数组首元素地址,也可以是字符串首元素地址。

返回值:

  • 左边 > 右边,返回大于0的数字(不一定返回的就是1)
  • 左边 = 右边,返回0
  • 左边 < 右边,返回小于0的数字(不一定返回的就是-1)

2、函数特点

这里需要注意strcmp 什么时候会停止比较:

(1) 两者之一遇到 '\0'

两个字符串只要其中一个先遇到 '\0',后面就停止比较,此时会让 '\0' 参与比较

int main() {char* str1 = "ab";char* str2 = "abcd";int ret = strcmp(str1, str2);printf("比较结果为: %d\n", ret);return 0;
}

str1先遇到'\0',此时会把 '\0' 和 'c' 比较,结果是 ‘c’ 更大,所以返回结果是 -1

(2) 在遇到'\0' 之前就分出大小

int main() {char* str1 = "abdd";char* str2 = "abcd";int ret = strcmp(str1, str2);printf("比较结果为: %d\n", ret);return 0;
}

两个字符串比较到第2个位置的时候,'d' 因为大于 'c',所以结果是str1更大,返回结果为1

四、strerror 函数

strerror 函数获取 系统错误码对应的错误信息。当调用库函数出错的时候,错误码会存在变量errno 中,要使用该变量需引入errno.h 头文件。

1、参数返回值解析

第一个参数:错误码errno

返回值:返回 系统错误码对应的错误信息

2、函数使用

int main() {FILE* fd = fopen("a.txt", "r");if (fd == NULL){printf("错误信息为: %s\n", strerror(errno));return -1;}return 0;
}

因为a.txt 不存在,所以这里肯定会打开失败。其实C还给我们提供了一个更直接的函数 perror,使用这个函数可以直接打印错误提示信息。

字符函数(strlen、strcpy、strcmp、strerror)相关推荐

  1. C语言库函数的实现(strlen strcpy strcmp strcat strstr)

    库函数的实现 strlen strcpy strcmp strcat strstr assert函数 头文件:assert.h 又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的 ...

  2. 字符串函数实现(strlen,strcpy,strcmp,strcat,strrev)

    声明:以下代码可能并非最佳方法,若有错误疑问欢迎提出!!! strlen函数 #include<stdio.h> #include<string.h>int mylen(cha ...

  3. 《C语言杂记》理解字符串处理函数 strlen() strcpy() strcat() strcmp()

    在linux C 编程中,我们经常遇到字符串的处理,最多的就是字符串的长度.拷贝字符串.比较字符串等:当然现在的C库中为我们提供了很多字符串处理函数.熟练的运用这些函数,可以减少编程工作量,这里介绍几 ...

  4. 字符串函数中的求长度、查找、分割和错误报告函数(strlen,strstr,strtok,strerror)

    文章目录 一.strlen - 求字符串长度 1.函数介绍 2.模拟实现(三种方式) 二.strstr - 字符串查找 1.函数介绍 2.模拟实现 三.strtok - 字符串分割 四.strerro ...

  5. strlen,strcpy,strcmp,strcat,strncpy,strncmp,strncat

    写在前面:本文比较长,覆盖了c语言中较多的字符串函数,作者会先带各位了解标准库对函数的介绍,然后模拟实现相关功能. strlen 求字符串长度 size_t表明返回一个无符号类型的数字,是因为考虑到l ...

  6. strlen, strcpy,strcmp,strcat,strncpy,strncmp,strncat,strst库函数的详细解析以及模拟实现

  7. 如何用C语言实现各种字符函数和字符串函数strstr、memcpy、memmove、strlen、strcpy、strcmp、strcat

    用C语言模拟实现字符函数与字符串函数 strstr.memcpy.memmove.strlen.strcpy.strcmp.strcat 若使用本文相关代码,还请动手点个赞!!! #define _C ...

  8. C语言常用字符串操作函数大全详解(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)

    参考:string.h中常用字符串操作函数说明(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等) 作者:一只青木呀 ...

  9. C语言常用字符串函数strlen、strcpy、strcat、strcmp、strchr

    C语言常用字符串函数,求串长strlen(char *s).串复制strcpy(char *s1,char *s2).串连接strcat(char *s1,char *s2).串比较strcmp(ch ...

最新文章

  1. 阿里动物园再添新丁,小蛮驴搞定物流最后三公里
  2. 解决 win10+pycharm 环境 Matplotlib图表不能在Pycharm中显示的等问题
  3. 。net面试题(2)
  4. linux 内核模块开发,Linux内核模块开发(笔记)
  5. 真人秀制作网站_真人秀正在毁掉中国的明星
  6. 国寿鸿寿年金保险(分红型)
  7. 基于OpenCV及Python的数独问题识别与求解(一)图像预处理
  8. 关于JavaScript面向对象
  9. ax200 兼容性问题 老路由器_我的华硕AX89X 160频宽和MU-MIMO问题,小米10测速-路由器交流...
  10. Vue 实现下拉加载更多
  11. buct oj 最大公共子序列问题
  12. mysql时间段重叠_MySQL - 如何选择'DISTINCT'重叠时段(日期或数字范围)
  13. suptitle()--matplotlib
  14. 申请公网ip后,配置光猫,路由器使用公网ip步骤
  15. 移动端 简易的table表格
  16. LIBSVM实验-在matlab中使用heart_scale数据集
  17. 苹果4s怎么越狱教程_苹果手机:iOS12怎么降级iOS12一键刷机降级教程
  18. 【Rust 笔记】09-特型与泛型
  19. PyQt5学习(7):打印Qprinter
  20. oracle到神通,我的ORACLE笔记(三)

热门文章

  1. 使用Qt打造属于自己的串口调试助手
  2. TLB中ASID和nG bit的关系
  3. python 指纹_详解Python3之数据指纹MD5校验与对比
  4. 【python解决SQLAlchemy+MySQL插入数据时报警告Warning: (1366, “Incorrect string value: ‘\\xD6\\xD0\\xB9\\xFA\\xB】
  5. 现代密码学:信息安全基础
  6. 计算机毕业设计SSM大学生学习交友平台【附源码数据库】
  7. 基于python编码实现多智能体进化算法求解带硬时间窗约束的VRP问题(适配版)
  8. BOOTMGR is missing错误提示解决方法
  9. 在Carla中加入可以使用的自己的车
  10. 【SAP】财务专用客户和财务专用供应商