当前位置: 首页 > 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.hskmm.com/?act=detail&tid=33463

相关文章:

  • 2025年法兰保护罩/阀门保温罩/法兰罩/法兰防溅罩/法兰保护套厂家推荐排行榜,专业防护与优质服务首选!
  • Aniyomi:功能强大的动漫影视播放阅读器
  • 2025年无心/外圆磨床,滚丝机,外圆抛光机,送料机,送料架,自动化,机械手厂家推荐排行榜,专业品质与高效性能之选!
  • 2025年陶瓷过滤机厂家推荐排行榜,陶瓷真空/盘式/矿用/全自动/带式陶瓷过滤机,固液分离设备公司推荐!
  • ICASSP 2022语音识别技术突破与创新
  • 140亿元!曝芯片巨头拟出售通信类业务
  • 2025多校冲刺 CSP 模拟赛 6
  • Cisco ASR 9000 Router IOS XR Release 7.11.2 MD - 思科 ASR 9000 路由器系统软件
  • 2025年瑕疵检测设备厂家推荐排行榜,表面瑕疵检测,薄膜瑕疵检测,铝箔瑕疵在线检测,外观瑕疵检测机公司精选!
  • 开机自启动
  • 10.16 闲话-k 短路
  • 初次扫描设计
  • 关于虚数单位与复数
  • AI深度学习平台快速诊断肌张力障碍
  • 2025年多功能防水篷布厂家推荐排行榜,聚乙烯/帐篷/汽车/宴会/盖草布/泳池布/微喷水带/日用盖/农林用/重型机器用篷布公司精选
  • 2025年干燥机厂家推荐排行榜,小型喷雾/实验室离心喷雾/双锥回转真空/搪瓷双锥/旋转闪蒸/振动流化床/真空耙式/单层带式/多层带式/立式沸腾/卧式沸腾/滚筒刮板干燥机!
  • 2025年润滑油厂家推荐排行榜,工业/汽车/发动机/甲醇发动机润滑油,全合成/长效润滑油公司精选
  • 2025年数粒机厂家推荐排行榜,防爆/新型/高速/高精度/智能/大容量/多通道/电子/视觉/全自动/低噪音/制药/农业/食品/电子元件/光电/定制化/鹌鹑蛋/糖果/坚果/药品/片剂数粒机公司推荐
  • 2025年码垛机厂家推荐排行榜,多样板材/倒板/分拣/上料/下料码垛机,全自动/半自动/龙门/桁架/双工位/单工位/单立柱码垛机械手公司推荐!
  • 2025年CNC高压清洗机厂家推荐排行榜,CNC全自动高压清洗机,CNC去毛刺清洗机,工业CNC高压清洗机公司推荐!
  • 数字化ERP“一图四清单”战略执行体系 - 智慧园区
  • 因果分布变化解释方法解析
  • OAuth/OpenID Connect 渗透测试完整指南
  • 2025年塑料托盘厂家推荐排行榜,网格川字/九脚/田字/双面/平板/吹塑/注塑/焊接/印刷/组装款/高矮脚/反川字/立体库托盘公司精选
  • 2025年信息流代运营服务商权威推荐榜:精准投放与高效转化的首选!
  • 2025年铝单板厂家推荐排行榜,氟碳/木纹/冲孔/外墙/雕花/异形/双曲/弧形/雕刻铝单板公司精选
  • 2025年轻钢龙骨厂家,铝方通厂家,铝单板厂家,石膏板厂家权威推荐榜单:专业品质与市场口碑深度解析
  • 2025年解冻设备厂家推荐排行榜,低温高湿/静电解冻/射频解冻/速冻螺旋/缓化柜/复醒柜设备公司精选!
  • 2025年数控滚齿机厂家推荐排行榜,高速/高效/立式/卧式/直齿/斜齿/圆柱齿轮/锥形齿轮/涡轮蜗杆/花键轴/链轮/多联齿/小模数/大模数/高精度滚齿机公司推荐!
  • 2025年防腐木加工厂权威推荐榜:环保耐用,品质卓越的厂家精选!