今天是学习嵌入式的第八天

发布时间:2026/7/29 6:02:50
今天是学习嵌入式的第八天 我今天又学习了字符型数组知识很多很庞大我的脑袋有点装不下在这里记一下C语言 字符型数组1.定义方式方式1char arr[10]; 开辟一块空间最多放下10个字符。要是不手动初始化里面装的全是杂乱无章的随机垃圾数据千万别直接拿来用方式2char arr[6]{a,b,c,d,e,\0}; 一个字符一个字符手动填写一定要记得亲手加上字符串终结者\0漏掉就要出大乱子。方式3char arr[]hello; 用双引号字符串初始化不用咱们操心编译器会贴心地在文字末尾自动补上\0懒人首选写法。2.核心重点1. 咱们C语言里的字符串说白了就是带特殊标记的字符数组。\0ASCII数值0就是终止信号程序读到它就知道字符串到头了。2. 看着简短的 abc可别以为只占3个位置内存真实存放a b c \0实打实占用4个字节。3. 想把字符数组当成正常字符串操作一定要预留出存放\0的位置挤不下结束符后续所有字符串操作全部翻车3.输入输出1. printf(%s,arr); 专门打印字符串一路向后读取字符撞见\0立刻停下。2. scanf(%s,arr); 读取字符串数组名前面不用写取地址符但是它有个坏毛病碰到空格、回车就直接断读。⚠️巨大隐患不会限制输入长度一旦输入文字太长直接造成数组越界程序极易崩溃。3. gets()早就被新标准淘汰的函数安全漏洞巨大写代码直接避开千万别尝试4.常用头文件函数 string.h先牢记三大高频深坑1. 数组缺少末尾\0printf打印、strlen计算长度全部乱套疯狂越界乱读内存。2. scanf天生读不了带有空格的一句话想要录入带空格文本要另想办法。3. 字符数组禁止直接写 arr1 arr2; 完成复制数组不支持等号赋值老老实实调用strcpy。1.strlen(数组名)作用统计字符串里面有效文字个数读到\0停止不算上结束符\0。分清两个容易混淆的家伙sizeof 统计整个数组一共占用多少字节包含\0strlen只统计看得见的字符。避坑提醒数组没有\0时strlen会漫无目的地向后乱读内存返回一堆毫无意义的随机数字。2.strcpy(目标数组,源字符串)作用把源头字符串完整拷贝到目标数组文字连同末尾的\0一起搬走。重点记住字符数组不能依靠等号直接互相赋值拷贝字符串只能靠它。风险预警目标数组空间必须足够宽裕装下全部文字外加\0空间不够直接越界出错。3.strcat(目标数组,追加字符串)作用实现字符串拼接。程序先找到目标数组原本的\0从这个位置开始接上新内容拼接结束自动补充全新的\0。两个硬性要求目标数组一开始就得存在合法\0数组剩余空间足够放下拼接完成后的所有字符。4.strcmp(字符串1,字符串2)作用依据ASCII编码逐个字符对比两组字符串。返回值规则两个字符串完全一致返回0第一个字符串更大返回正数第一个字符串更小返回负数。小细节只要碰到一对不相同的字符立刻停止对比不会继续往后检测剩余内容。最后再划个重中之重千万别搞混 strlen 和 sizeofsizeof 计算整块数组占用内存大小strlen 仅仅统计字符串里有效字符数量。如果你需要我还能再精简成适合背诵的课堂笔记版本