str 函数用法 c 语言 字符串库函数详解
c 语言里面 str 开头的函数都属于 string.h 头文件下的字符串处理函数,大家习惯统称 str 函数,核心结论就是这类函数专门用来处理以 \0 作为结束标记的字符数组也就是 C 风格字符串,使用之前必须引入头文件 string.h,最常用的包含 strlen strcpy strcat strcmp strstr strchr strrev 等,很多初学者容易混淆这些函数的返回值,还经常忘记字符串末尾的 \0,造成越界访问内存崩溃,这也是 c 语言编程笔试非常高频的考点。学习 str 函数的时候,要分清每一个函数的功能 参数含义 返回值,同时理解底层原理,所有 str 函数都是依靠识别 \0 来判断字符串结束,一旦传入没有 \0 的字符数组,函数就会持续向后读取内存,产生未定义错误。
常用 str 函数分项讲解
strlen
功能 获取字符串有效长度,统计 \0 之前字符个数,不把结束符 \0 算入长度
参数 传入字符串首地址 char 指针
返回值 size_t 类型无符号整数
注意点 size_t 是无符号类型,做减法的时候容易出现隐式转换坑,比如 strlen a 减 strlen b 不会得到负数
strcpy
功能 把源字符串完整复制到目标内存空间,包含末尾 \0
参数 目标首地址 源字符串首地址
返回值 返回目标内存的首指针
注意点 目标缓冲区必须足够大,否则内存溢出,新版推荐使用 strncpy 做长度限制
strcat
功能 字符串拼接,把源字符串接到目标字符串末尾,并且自动写入新的 \0
参数 目标首地址 源字符串首地址
返回值 返回目标字符串首指针
注意点 目标原有字符串末尾必须存在 \0,目标缓冲区容量要能容纳拼接之后全部字符
strcmp
功能 按 ASCII 码逐位比较两个字符串大小
参数 两个待比较字符串首地址
返回值 相等返回 0,第一个串大于第二个返回正数,第一个串小于第二个返回负数
注意点 不是比较字符串长度,是逐字符 ASCII 对比,这个是最常见易错点
strstr
功能 在主字符串里面查找子串第一次出现的位置
参数 主串首地址 待查找子串首地址
返回值 找到就返回子串起始指针,找不到返回空指针 NULL
strchr
功能 在字符串里面查找指定字符第一次出现位置
参数 字符串首地址 待查找字符
返回值 找到返回该字符指针,找不到返回 NULL
核心函数对照表
函数名 核心功能 返回值 头文件 关键风险
strlen 求字符串长度 size_t string.h 无符号类型坑
strcpy 字符串复制 char 指针 string.h 缓冲区溢出
strcat 字符串拼接 char 指针 string.h 缓冲区溢出
strcmp 字符串比较 int 整数 string.h 不是比长度
strstr 查找子串 char 指针 string.h 空指针判断
strchr 查找单字符 char 指针 string.h 空指针判断
编程使用要点清单
第一 使用全部 str 函数之前,代码开头必须写 include string.h,不引入头文件部分编译器会警告或者报错
第二 所有 str 函数操作的字符串必须以 \0 结尾,普通字符数组如果没有手动添加 \0,不能直接传给 str 函数
第三 strcpy strcat 属于不安全函数,实际项目优先选择带长度限制版本 strncpy strncat,防止缓冲区溢出
第四 返回指针的 str 函数,拿到返回值之后要判断是否为 NULL,不要直接解引用
第五 size_t 是无符号数,strlen 返回值不要直接和负数比较,否则会触发隐式类型转换 bug
【常见问题】
问题 1 c 语言 str 函数为什么都要包含 string.h 头文件
回答 1 c 语言 str 函数全部声明在 string.h 当中,使用 str 函数的时候引入这个头文件,编译器才能识别函数原型,否则会出现隐式声明警告。
问题 2 c 语言 str 函数里面 strcmp 是比较字符串长度吗
回答 2 c 语言 str 函数中的 strcmp 并不是比较字符串长度,它是按照 ASCII 码逐个字符对比,根据字符大小返回正负值或者 0。
问题 3 c 语言 str 函数 strlen 会统计末尾的 \0 吗
回答 3 c 语言 str 函数里的 strlen 只统计 \0 之前有效字符,不会把字符串结束标记 \0 计入最终返回的长度数值。
【免责申明】
本文内容仅作为 c 语言 str 函数学习参考,不同编译器标准实现细节存在差异,工程开发请遵循对应 c 标准规范,实际项目编码优先考虑内存安全。
相关阅读
-
油麦菜家常做法主要包含蒜蓉清炒 白灼 豆豉鲮鱼炒 凉拌这几类,油麦菜本身带有独特清苦清香,叶片薄熟化速...浏览全文>>
-
c 语言里面 str 开头的函数都属于 string h 头文件下的字符串处理函数,大家习惯统称 str 函数,核心...浏览全文>>
-
薏米红豆祛湿汤是很经典的家常食疗汤品,核心就是用薏米搭配赤小豆慢火煲煮,重点提醒很多人会误用普通红小豆...浏览全文>>
-
野枸杞在确认品种是枸杞原种,并且生长环境没有污染的前提下可以食用,但是野外很容易把野枸杞和外形相似的有...浏览全文>>
-
扬州清蒸狮子头是淮扬经典菜,核心要点是选用三分肥七分瘦猪肉,手工切粒不用绞肉机,加马蹄或者藕丁,分次打...浏览全文>>
-
学酒店管理整体没有特别苛刻的硬性门槛,高中或者中职毕业都可以报考,但是想要学好并且未来从事酒店行业,对...浏览全文>>
-
新婚仪式当中的合卺酒,就是传统婚礼里新人共同饮用的酒,很多人会误以为合卺酒是新婚夜单独饮用,实际上合卺...浏览全文>>
-
香瓜本身清甜脆嫩,做菜适合走清爽路线,比较好吃的做法主要有香瓜炒虾仁 香瓜凉拌菜 香瓜炒肉片,香瓜自带...浏览全文>>
-
虾干本身经过脱水干制,自带鲜咸风味,最简单的吃法就是泡软之后直接蒸制或者清炒,不需要复杂调料,核心要点...浏览全文>>
-
闻字下面多一横猜成语,标准答案是充耳不闻,这个是经典看图猜成语题目,核心思路是闻字的耳部件下方额外增加...浏览全文>>
- Adobe推出PhotoshopElements和PremiereElements2025取消Elements软件的永久许可
- Insta360AcePro2主要规格终于泄露GoPro和DJI运动相机竞争对手将配备50MP传感器5nm和2倍数码变焦
- 索尼INZONEM10S华硕ROGSwiftOLEDPG27AQDP新品上市但售价更高
- GalaxyS25Plus看起来很时髦但三星是否选择像iPhone一样的通用设计
- AOC推出四款新型游戏显示器具有快速刷新率和低价格
- Valve出售部分SteamDeck型号-GBLCD型号售价296.65美元512GBLCD型号售价336.75美元
- Beats在其产品线中增加了手机保护壳推出适用于iPhone16系列的MagSafe保护壳
- 新的AIPlaygroundDesign工具你可以简单地与之交谈就像ChatGPT一样
- GAMEBABY控制器和外壳混合套装现已接受预订
- Galaxy Watch Ultra 证明优质智能手表不仅仅是技术
- GameNGen是一种疯狂的新型AI模型可以即时生成可玩的视频游戏
- iOS18公开测试版5现已发布正式版即将发布
- AndroidAuto借助其新的GoogleAssistantUI获得Siri的青睐
- 苹果将要求Patreon为新会员支付30%的AppStore费用
- 谷歌的下一代4K机顶盒电视流媒体可能比我们想象的更贵
- StarBook 7:基于 Linux 的笔记本电脑现已推出
- Yum! Brands 将语音 AI 推广到更多 Taco Bell 门店
- GoogleGemini可能很快就能让你进一步编辑AI生成的图像
- cOSSequoiabeta4现已推出具有以下功能
- iOS18beta4现已向开发人员开放但AppleIntelligence在哪里
