发布时间:2026/7/23 2:06:16
Day07_C语言字符串避坑指南 嵌入式自学 Day07我踩过的 6 个字符串坑——strlen、sizeof、\0、gets 全讲透这是我的嵌入式自学Day07。前几天一直在学数组我以为字符数组不过是「存字符的数组」。直到写出这样一段代码chars[10]hello;printf(%d\n,strlen(s));printf(%d\n,sizeof(s));我本来以为两个都会输出10。结果程序却打印5 10当时第一反应就是数组长度明明是10为什么 strlen 却只有5后来才发现我一直把字符数组和字符串混为一谈了。今天就把我踩过的几个坑整理出来希望刚学 C 的朋友少绕一点弯路。坑一字符数组 ≠ 字符串很多人第一次都会觉得char 数组就是字符串。其实不是。例如chars[10]hello;内存真正存的是下标 0 1 2 3 4 5 6 7 8 9 内容 h e l l o \0 ? ? ? ?数组长度是10。真正的字符串只有hello因为它在\0就结束了。为什么会错数组只是存储空间。字符串其实是一段以\0结尾的数据。正确代码chars1[]hello;chars2[10]hello;s1长度是 6包含\0s2长度是 10一句话总结字符数组是容器字符串只是容器里以\0结束的一段内容。坑二别把\0当成普通字符错误示例chars[5]hello;为什么错“hello” 实际需要 6 个字节包含\0。正确代码chars[6]hello;// 或 char s[] hello;一句话总结字符串真正结束的位置不是最后一个字母而是\0。坑三strlen 为什么不是 sizeof错误示例chars[10]hello;printf(%zu\n,strlen(s));printf(%zu\n,sizeof(s));为什么错strlen()统计\0前面的字符数sizeof()统计整个数组大小输出strlen5 sizeof10一句话总结strlen 看字符串长度sizeof 看内存大小。坑四字符串不能直接用 复制错误示例chars1[]hello;chars2[20];s2s1;正确代码chars1[]hello;chars2[20];strcpy(s2,s1);一句话总结字符串复制请用strcpy()。坑五strcat() 不是无限拼接错误示例chars[10]hello;strcat(s,world);为什么错目标数组空间不足会越界。正确代码chars[20]hello;strcat(s,world);一句话总结拼接前先确认目标数组容量。坑六gets() 为什么被淘汰错误示例chars[10];gets(s);为什么错不会检查输入长度容易数组越界。正确代码chars[10];fgets(s,sizeof(s),stdin);一句话总结不要再使用 gets()。今日避坑指南字符数组不等于字符串字符串必须以\0结束strlen()看字符串长度sizeof()看数组大小strcpy()复制字符串strcat()注意空间不要使用gets()今日学习感悟真正理解字符串不是记住几个函数而是理解\0才是 C 字符串结束的标志。以后无论是串口、协议解析还是嵌入式开发这都是必须掌握的基础。下一篇预告为什么冒泡排序这么慢一篇讲透 C 语言三种经典排序算法——排序算法专题三种排序横向对比。

相关新闻

2026/7/23 2:06:16

MySQL 索引原理——B+ 树、聚簇索引、覆盖索引

索引是 MySQL 性能优化的核心。理解索引的原理,才能用好索引。 一、B 树结构 叶子节点存数据,非叶子节点存键值指针 叶子节点之间有链表连接,支持范围查询 高度 3-4 层能支撑千万级数据二、聚簇 vs 非聚簇 InnoDB 主键索引(聚簇&a…

2026/7/23 2:06:16

ChatGPT记忆功能解析:从技术原理到工程实践

如果你还在为每次与ChatGPT对话都要"从头开始"而烦恼,那么最近OpenAI推出的记忆功能更新,可能正是你期待已久的解决方案。这项看似简单的功能升级,实际上正在重新定义我们与AI的交互方式——从单次对话的工具,转变为真正…

2026/7/23 2:06:16

技术博客写作规范指南:结构设计、代码规范与最佳实践

这次我们来看一个技术内容创作规范指南。在技术博客写作中,遵循正确的格式要求和内容规范至关重要,这直接影响到文章的可读性和传播效果。本文将重点解析技术博客的核心写作要点,包括结构设计、内容组织、代码规范等实用技巧。对于技术作者来…

2026/7/23 3:36:21

准大二学生从0开始学AI——机器学习Day3

---type: daily_notetitle: Phase 2.1 Day 3 — 梯度下降date: 2026-07-22person: 吴恩达phase: "2.1"day: 3topics: [梯度下降, 学习率, 批量梯度下降]---# 2026-07-22 学习笔记## 笔记区(学的时候随手记)### 核心观点- **MSE(Mea…

2026/7/23 3:36:21

GPU加速机器人学习:Isaac Gym实战与性能优化

1. 项目概述:当GPU算力遇上机器人学习革命在机器人技能训练领域,我们正经历着从"实验室小批量训练"到"工业级高通量训练"的范式转移。传统机器人学习往往受限于物理样机成本、实验场地限制和训练周期漫长等问题,而NVIDIA…

2026/7/23 3:36:21

【电影】惊声尖笑6 (2026) 4K DVHDR 内封简中 夸克网盘资源下载

影片名称:惊声尖笑6 Scary Movie 导演: 迈克尔泰兹编剧: 里克阿尔瓦雷斯 / 基伦埃弗瑞韦恩斯 / 马龙韦恩斯 / 肖恩韦恩斯主演: 马龙韦恩斯 / 肖恩韦恩斯 / 安娜法瑞丝 / 雷吉娜赫尔 / 小达蒙韦恩斯类型: 喜剧 / 恐怖制片国家/地区: 美国 / 英国语言: 英语上映日期: …

2026/7/23 3:36:21

从功能实现到工程化:AI代码生成的质量评估与Qwen3.8实践

上周在测试几个主流大模型时,我注意到一个有趣的现象:当被要求生成一段中等复杂度的数据处理代码时,Qwen3.8-max-Preview不仅正确实现了功能,还额外添加了异常处理、类型注解和清晰的文档字符串——这种“超额交付”在代码生成任务…

2026/7/23 3:31:20

架构师转型大模型的90天实战指南

1. 老架构师转型大模型的实战路径解析作为在传统架构领域深耕15年的技术老兵,我去年毅然投入1.5万元自费试错大模型技术转型。经过三个月的密集攻坚,终于摸索出一套可复制的"极速上岸"方法论。这套方法特别适合像我这样有扎实技术基础但缺乏AI…

2026/7/22 9:29:13

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/23 0:01:10

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/22 21:00:12

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…