c语言标准库详解(七):字符串函数<string.h>

头文件<string.h>中定义了两组字符串函数。第一组函数的名字以 str 开头;第二组函数的名字以 mem 开头。除函数 memmove 外,其它函数都没有定义重叠对象间的复制行为。比较函数将把参数作为 unsigned char 类型的数组看待。

第一组

在下表中,变量 s 和 t 的类型为 char *;cs 和 ct 的类型为 const char *;n 的类型为 size_t;c 的类型为 int(将被转换为 char 类型)。

函数名 功能
char *strcpy(s,ct) 将字符串 ct(包括’\0’)复制到字符串 s 中,并返回 s
char *strncpy(s,ct,n) 将字符串 ct 中最多 n 个字符复制到字符串 s 中,并返回 s。如果 ct 中少于 n 个字符,则用’\0’填充
char *strcat(s,ct) 将字符串 ct 连接到 s 的尾部,并返回 s
char *strncat(s,ct,n) 将字符串 ct 中最多前 n 个字符连接到字符串 s 的尾部,并以’\0’结束;该函数返回 s
int strcmp(cs,ct) 比较字符串 cs 和 ct;当 cs<ct 时,返回一个负数;当 cs==ct 时,返回 0;当 cs>ct 时,返回一个正数
int strncmp(cs,ct,n) 将字符串 cs 中至多前 n个字符与字符串 ct 相比较。当 cs<ct 时,返回一个负数:当 cs==ct 时,返回0;当 cs>ct 时,返回一个正数
char *strchr(cs,c) 返回指向字符 c 在字符串 cs 中第一次出现的位置的指针;如果 cs 中不包含 c,则该函数返回 NULL
char *strrchr(cs,c) 返回指向字符 c 在字符串 cs 中最后一次出现的位置的指针;如果 cs 中不包含 c,则该函数返回 NULL
size_t strspn(cs,ct) 返回字符串 cs 中包含 ct 中的字符的前缀的长度
size_t strcspn(cs,ct) 返回字符串 cs 中不包含 ct 中的字符的前缀的长度
char *strpbrk(cs,ct) 返回一个指针,它指向字符串 ct 中的任意字符第一次出现在字符串 cs 中的位置;如果 cs 中没有与 ct 相同的字符,则返回 NULL
char *strstr(cs,ct) 返回一个指针,它指向字符串 ct 第一次出现在字符串 cs 中的位置;如果 cs 中不包含字符串 ct,则返回 NULL
size_t strlen(cs) 返回字符串 cs 的长度
char *strerror(n) 退回一个指针,它指向与错误编号 n 对应的错误信息字符串(错误信息的具体内容与具体实现相关)
char *strtok(s,ct) strtok函数在s中搜索由ct中的字符界定的记号。详细信息参见下面的讨论

对 strtok(s, ct)进行一系列调用,可以把字符串 s 分成许多记号,这些记号以 ct 中的字符为分界符。第一次调用时,s 为非空。它搜索 s,找到不包含 ct 中字符的第一个记号,将 s 中的下一个字符替换为’\0’,并返回指向记号的指针。随后,每次调用 strtok 函数时(由 s 的值是否为 NULL 指示),均返回下一个不包含 ct 中字符的记号。当 s 中没有这样的记号时,返回 NULL。每次调用时字符串 ct 可以不同。
特别要注意分割处理后原字符串 str 会变,变成第一个子字符串
说白了,这个函数有状态
示例(除strtok外):

#include <stdio.h>
#include <string.h>
void printStr(char* src){int i=0;while(src[i]!='\0'){printf("%c",src[i]);i++;}printf("\n");
}
int main(){char str1[512];char str2[1024];strcpy(str2,"Make America Great Again!");printStr(str2);strcpy(str1,"CNN Fake News!");printStr(str1);strncpy(str2,str1,6);printStr(str2);strcat(str2,str1);printStr(str2);printf("%d\n",strcmp(str1,str2));printf("%d\n",strncmp(str1,str2,6));printf("%c\n",*strchr(str2,'A'));printf("%d\n",*strrchr(str2,'G'));printf("%d\n",strspn(str2,str1));printf("%d\n",strcspn(str2,"Human Right"));printf("%d\n",strlen(str2));
}

输出:

PS G:\CSAPP>  & 'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.0\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-qgzcdwvk.gxf' '--stdout=Microsoft-MIEngine-Out-wj0yyhuh.y4x' '--stderr=Microsoft-MIEngine-Error-kyu4s343.tmb' '--pid=Microsoft-MIEngine-Pid-unlymjir.kfu' '--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gdb.exe' '--interpreter=mi'
Make America Great Again!
CNN Fake News!
CNN Famerica Great Again!
CNN Famerica Great Again!CNN Fake News!
-1
0
A
71
6
3
39
PS G:\CSAPP> 

示例(strtok):

#include <string.h>
#include <stdio.h>
int main () {char str[80] = "This is a fan of-Quentin-Tarantino";const char s[2] = "-";char *token;/* 获取第一个子字符串 */token = strtok(str, s);/* 继续获取其他的子字符串 */while( token != NULL ) {printf( "%s\n", token );token = strtok(NULL, s);}printf("\n%s\n",str);return(0);
}

输出:

PS G:\CSAPP>  & 'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.0\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-xns41bft.qby' '--stdout=Microsoft-MIEngine-Out-w212wzzk.mpb' '--stderr=Microsoft-MIEngine-Error-b1wdpiu5.l2i' '--pid=Microsoft-MIEngine-Pid-ojoy1rfn.zmg' '--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gdb.exe' '--interpreter=mi'
This is a fan of
Quentin
TarantinoThis is a fan of
PS G:\CSAPP> 

第二组

以 mem 开头的函数按照字符数组的方式操作对象,其主要目的是提供一个高效的函数接口。在下表列出的函数中,s 和 t 的类型均为 void * , cs 和 ct 的类型均为 const void * ,n 的类型为 size_t,c 的类型为 int(将被转换为 unsigned char 类型)

函数名 功能
void *memcpy(s,ct,n) 将字符串 ct 中的 n 个字符拷贝到 s 中,并返回 s
void *memmove(s,ct,n) 该函数的功能与 memcpy 相似,所不同的是,当对象重叠时,该函数仍能正确执行
int memcmp(cs,ct,n) 将 cs 的前 n 个字符与 ct 进行比较,其返回值与 strcmp的返回值相同
void *memchr(cs,c,n) 返回一个指针,它指向 c 在 cs 中第一次出现的位置。如果 cs 的前 n 个字符中找不到匹配,则返回 NULL
void *memset(s,c,n) 将 s 中的前 n 个字符替换为 c,并返回 s

示例与前面差不多,就不写了⑧

c语言标准库详解(七):字符串函数string.h相关推荐

  1. c语言标准库详解(十四):时间函数time.h

    c语言标准库详解(十四):时间函数<time.h> 概述 头文件<time.h>中声明了一些处理日期与时间的类型和函数.其中的一些函数用于处理当地时间,因为时区等原因,当地时间 ...

  2. c语言标准库详解(十二):非局部跳转setjmp.h

    c语言标准库详解(十二):非局部跳转<setjmp.h> 概述 头文件<setjmp.h>中的声明提供了一种不同于通常的函数调用和返回顺序的方式,特别是,它允许立即从一个深层嵌 ...

  3. c语言标准库详解(八):数学公式math.h

    c语言标准库详解(八):数学公式<math.h> 概述 头文件<math.h>中声明了一些数学函数和宏. 宏 EDOM 和 ERANGE(在头文件<error.h> ...

  4. c语言标准库详解(十一):可变参数表stdarg.h

    c语言标准库详解(十一):可变参数表<stdarg.h> 概述 头文件<stdarg.h>提供了遍历未知数目的函数参数表的功能. 假定函数 f 带有可变数目的实际参数,last ...

  5. c语言标准库详解(零):总述

    c语言标准库详解(零):总述 关于标准库 标准库不是C语言本身的构成部分,但是支持标准C的实现会提供函数库中的函数声明.类型以及宏定义 标准库的内容 标准库中的函数.类型以及宏分别在下面的标准头文件中 ...

  6. c语言标准库详解(十五):limits.h与float.h

    c语言标准库详解(十五):<limits.h>与<float.h> 概述 <limits.h> 头文件<limits.h>定义了一些表示整型大小的常量. ...

  7. 详解MySQL字符串函数重复REPEAT()、反转REVERSE()、格式化FORMAT()、返回空格SPACE()函数用法(四)

    文章目录 一.重复函数REPEAT() 二.反转函数REVERSE() 三.格式化函数FORMAT() 四.反转函数SPACE() 前言:在实际的项目开发中有时会有对数据库某些字段去重等需求,这种场景 ...

  8. 详解MySQL字符串函数CONCAT()、CONCAT_WS()、INSERT()、REPLACE()、LOWER()、UPPER()用法(二)

    文章目录 一.合并字符串函数CONCAT()和CONCAT_WS() 1.CONCAT() 2.CONCAT_WS() 二.替换字符串INSERT()和REPLACE 1.INSERT() 2.REP ...

  9. 详解MySQL字符串函数TRIM()、填充函数LPAD()、RPAD()、字符串长度LENGTH()用法(三)

    文章目录 一.删除空格函数TRIM().LTRIM().RTRIM() 1.TRIM() 2.LTRIM() 3.RTRIM() 二.填充函数LPAD().RPAD() 1.LPAD() 2.RPAD ...

最新文章

  1. 3D姿态估计|时序卷积+半监督训练
  2. layui upload 额外参数上传
  3. php控制器无限极分类,thinkphp无限极分类实现方法
  4. Spring Boot——配置Spring Security配置类DEMO
  5. 小爱音箱mini系统故障怎么办_梦龙评机小米小爱音箱HD使用体验
  6. 为什么优秀和听话总是难两全?
  7. java dvd集合框架_JAVA 集合框架
  8. strcmp函数原型 C语言
  9. python cpk 计算
  10. JavaScript-197:模拟京东快递单号查询案例
  11. windows 7可用软件搜索贴~(转)(申请置顶)
  12. LGB、XGB、CBT参数
  13. iPhone装Android版,在iPhone里装了真·Android系统 这事情已经很神奇了
  14. PAT(乙级)2019年春季考试 7-5 校庆
  15. Zotero安装和使用
  16. android控件属性padding
  17. 三极管电路共集、共基、共射的区别
  18. 计算机专业免费电子书下载列表List of freely available programming books
  19. java项目抠图功能实现
  20. 跟尤雨溪一起解读Vue3源码笔记- Vue Mastery

热门文章

  1. 获取wifi当前手机连接的wifi信息以及信号强度
  2. 【AirPlay】苹果认证MFI学习
  3. 【算法】_013_矩阵乘法
  4. 回声状态网络(Echo State Network)
  5. 果园机器人的课文_《果园机器人》
  6. 说说你所熟知的MSSQL中的substring函数
  7. L4操作系统(L4/Fiasco)
  8. 2016年计算机一级考试试题及答案,2016年计算机一级考试试题题库操作题及答案...
  9. PR开场片头模板 枪击爆炸效果短视频开场logo展示PR模板
  10. 【STM32】STM32 startup启动文件选择