当前位置: 首页 > news >正文

字符串操作函数

> C 字符串全家桶:strcpy/strncpystrcat/strncatstrcmp/strncmpstrlen/strtok/memcpy/memset


C语言字符串与内存操作函数大全

核心字符串函数(位于 string.h 中)

这些函数用于基本的字符串操作,如复制、连接、比较和查找。

函数原型 功能描述 重要说明
char *strcpy(char *dest, const char *src); 字符串复制:将 src 复制到 dest 不安全:不检查目标数组 dest 的大小,极易导致缓冲区溢出。慎用!
char *strncpy(char *dest, const char *src, size_t n); 安全字符串复制:从 src 复制最多 n 个字符到 dest 相对安全:但不会自动添加终止符。如果 n 小于 src 的长度,dest 将不是一个有效的字符串
char *strcat(char *dest, const char *src); 字符串连接:将 src 追加到 dest 的末尾 不安全:同样不检查目标数组剩余空间,可能导致溢出。慎用!
char *strncat(char *dest, const char *src, size_t n); 安全字符串连接:从 src 追加最多 n 个字符到 dest 末尾 相对安全:会自动在追加的字符后添加字符串终止符 \0
int strcmp(const char *s1, const char *s2); 字符串比较:按字典序比较 s1 和 s2 返回值:<0:s1 < s2,0:s1 == s2,>0:s1 > s2
int strncmp(const char *s1, const char *s2, size_t n); 安全字符串比较:比较 s1 和 s2 的前 n 个字符 只比较前 n 个字符,更安全可控
size_t strlen(const char *s); 获取字符串长度:返回字符串 s 的长度(不包括终止符 \0 时间复杂度为 O(n),循环中频繁调用会影响性能
char *strchr(const char *s, int c); 查找字符:在 s 中首次出现字符 c 的位置 返回指向该位置的指针,如果未找到则返回 NULL
char *strrchr(const char *s, int c); 反向查找字符:在 s 中最后一次出现字符 c 的位置 返回指向该位置的指针,如果未找到则返回 NULL
char *strstr(const char *haystack, const char *needle); 查找子串:在 haystack 中查找子串 needle 第一次出现的位置 返回指向该子串的指针,如果未找到则返回 NULL
char *strtok(char *str, const char *delim); 字符串分割:根据分隔符 delim 将字符串 str 分割成一系列令牌(token) 会修改原字符串,非线程安全。首次调用传入 str,后续调用传入 NULL

字符分类/转换函数(位于 ctype.h 中)

这些函数用于检查和转换单个字符。

函数原型 功能描述 返回值
int isalnum(int c); 检查字符是否是字母或数字 (a-z, A-Z, 0-9) 是则返回真(非0),否则返回0
int isalpha(int c); 检查字符是否是字母 (a-z, A-Z) 同上
int isdigit(int c); 检查字符是否是数字 (0-9) 同上
int islower(int c); 检查字符是否是小写字母 (a-z) 同上
int isupper(int c); 检查字符是否是大写字母 (A-Z) 同上
int isspace(int c); 检查字符是否是空白字符 (空格、制表符 \t、换行 \n 等) 同上
int tolower(int c); 将字符转换为小写 返回转换后的小写字符
int toupper(int c); 将字符转换为大写 返回转换后的大写字符

内存操作函数(位于 string.h 中)

这些函数按字节操作内存,可用于处理非字符串数据(如结构体)或需要精确控制字节数的场景。

函数原型 功能描述 与字符串函数的区别
void *memcpy(void *dest, const void *src, size_t n); 内存复制:从 src 复制 n 个字节到 dest 不关心 \0,严格复制 n 个字节。源和目标内存不能重叠
void *memmove(void *dest, const void *src, size_t n); 内存移动:从 src 复制 n 个字节到 dest 功能同 memcpy,但能正确处理内存重叠的情况,更安全但稍慢
int memcmp(const void *s1, const void *s2, size_t n); 内存比较:比较 s1 和 s2 的前 n 个字节 按字节比较,不关心 \0
void *memset(void *s, int c, size_t n); 内存设置:将 s 指向的内存块的前 n 个字节设置为值 c 常用于初始化数组或申请内存后清零(如 memset(arr, 0, sizeof(arr))
void *memchr(const void *s, int c, size_t n); 内存字符查找:在 s 指向的前 n 个字节中查找字符 c 第一次出现的位置 不依赖 \0,只在指定的 n 个字节内查找

重要提示

  1. 安全性
  • 优先使用带 n 的长度受限函数(如 strncpy, strncat, snprintf),以避免缓冲区溢出漏洞
  1. 终止符 \0
  • C语言字符串以空字符 \0 结尾,这是所有字符串函数正常工作的前提
  • 使用 memcpy 等函数操作字符串时,必须手动确保 \0 的存在
  1. 现代替代
  • 在支持 C11 标准的编译器中,可以考虑使用更安全的版本(如 strcpy_s, strcat_s),但它们不是标准C库的一部分,可移植性较差
  • snprintf 是进行复杂字符串格式化和构造的一个非常安全且强大的替代方案
  1. 关键区别总结
特性 str 系列函数 mem 系列函数
结束条件 遇到 \0 字符串结束符 达到指定的期望大小
服务对象 字符串 任意类型数据
性能考虑 strlen 为 O(n) 复杂度 所有操作都有明确的字节数限制
  1. 实用建议
  • 在嵌入式开发中,优先使用 mem 系列函数处理二进制数据
  • 字符串操作时始终考虑缓冲区边界
  • 使用 memset 清零内存时要确保不会越界
  • strtok 不是线程安全的,多线程环境需要替代方案

核心原则:理解每个函数的边界条件和限制,根据具体场景选择合适的函数,始终优先选择安全的替代方案。

示例: 函数手册以及分析

头文件:#include <string.h>
函数原型:char *strcpy(char *restrict dst, const char *restrict src);char *strncpy(       char * dst, const char *restrict src, size_t dsize);
参数分析:dst --> 目标内存地址src --> 原始数据内存地址dsize --> 最大拷贝字节数 (必须小于等于dst的实际内存大小)
返回值:返回目标内存地址

strtok函数

功能: 用于按照指定的字符进行分割字符串。
实现: 该函数每一次调用会分割出一个字符串并返回该分割好的字符串入口地址,如果需要把所有分隔符进行分割则需要多次调用。除了第一个调用,往后的每一次调用原始字符串src都只需要传递NULL即可。

 #include <string.h>char *strtok(char *restrict str, const char *restrict delim);
参数分析:str -> 需要分割的原始字符串(必须可读写)delim -> 分隔符的集合(分隔符可以有多个,但是每一个都是独立存在的)
返回值:成功 返回下一个分割好的字符串入口地址失败 返回NULL 
http://www.sczhlp.com/news/206230/

相关文章:

  • 云南省建设厅网站处长免费咨询制度
  • wordpress商城 中文站网站开发前端制作
  • 怎么做自己的免费网站wordpress域名文件夹
  • 福永自适应网站建wordpress添加域名
  • 网站前台设计模板软件开发网站模板
  • 信息网站建设情况工作会编程培训机构哪个好
  • 外贸关键词网站怎样申请网站空间
  • 2021免费网站大全十种网络推广的方法
  • 做文案的网站有些什么海淀区
  • 深圳建站公司设计wordpress 连接ftp
  • 做水果网站需要些什么手续网站自动识别手机代码
  • 帮人做logo网站东营住房和城乡建设部网站
  • 高端定制网站开发建站教程详解dw制作一个手机网站模板下载地址
  • 建设网站用什么软件天河微网站建设
  • 桐梓住房和城乡建设部网站中等职业学校专业建设规划
  • 输入一组基因做网络图的网站wordpress判断登录用户为vip
  • 大连外贸网站建设宁波优化网站排名价格表
  • 哪些网站做任务可以赚钱的动漫网页制作
  • 手机版网站 html5如何做网站的维护和推广
  • 漯河专业做网站的公司成全视频免费观看在线看第7季
  • 成都营销型网站建设价格房屋产权地址备案在那个网站做
  • 大型网站设计公司专门做朋友圈小视频的网站
  • asp室内装修装潢网站源码wordpress短代码下载按钮
  • 网站做电子商务需要什么资质中国建设局网站
  • 网站设计是平面设计吗什么是企业vi设计
  • 网站建设周期规划建设网站的功能定位是什么原因
  • ICASSP 2022语音识别技术突破与创新
  • 140亿元!曝芯片巨头拟出售通信类业务
  • 2025年陶瓷过滤机厂家推荐排行榜,陶瓷真空/盘式/矿用/全自动/带式陶瓷过滤机,固液分离设备公司推荐!
  • 2025年无心/外圆磨床,滚丝机,外圆抛光机,送料机,送料架,自动化,机械手厂家推荐排行榜,专业品质与高效性能之选!