90%的C程序员都踩过这些坑,第5个连老手都翻车
📅 2026/7/23 4:36:53
👁️ 次浏览
90%的C程序员都踩过这些坑第5个连老手都翻车你有没有过这种经历代码编译通过没有一行报错运行结果却完全不对。你反复检查逻辑最后发现——问题出在一个你压根没注意到的陷阱上。C语言就是这样。它给你最大的自由也给你最多的坑。编译器不会帮你拦住大部分错误它只管语法对不对不管逻辑对不对。今天盘了8个最容易踩的坑每个都附错误代码和正确写法。不管你是刚入门还是写了几年看完至少能少掉一半头发。坑1一个等号让整个循环变成死循环错误写法把写成了// 这行代码不会报任何错if(a5){printf(a等于5\n);}a 5是赋值赋值表达式的值就是 55 非零条件永远为真。写在while里恭喜死循环。正确写法常量放左边语法级防错if(a5){printf(a等于5\n);}// 更好的写法把常量写左边if(5a){// 万一少写一个等号 → 编译器直接报错printf(a等于5\n);}老手的习惯if (5 a)而不是if (a 5)。这样万一漏写一个等号变成if (5 a)编译器直接报不能给常量赋值。坑2数组越界——C语言不会拦你但内存会记仇错误写法循环条件用了intarr[5]{1,2,3,4,5};for(inti0;i5;i){printf(%d ,arr[i]);// arr[5] 越界了}C 语言不做任何数组边界检查。arr[5]访问的是数组后面的未知内存轻则打印乱码重则修改函数返回地址程序直接崩溃。更可怕的是有时候越界访问不报错数据悄悄被改了等你排查的时候已经面目全非。正确写法用而不是for(inti0;i5;i){printf(%d ,arr[i]);}记住数组长度是 N下标范围是0 ~ N-1循环条件永远是i N。坑3野指针——free之后别再碰它错误写法释放后继续使用int*p(int*)malloc(sizeof(int));*p10;free(p);*p20;// 野指针这块内存已经不属于你了free(p)之后p 指向的内存已经被系统回收。你再去读写就是进了别人家翻东西——行为完全未定义。可能崩溃可能数据错乱也可能看起来正常埋下定时炸弹。正确写法释放后立刻置空free(p);pNULL;// 置空后即使误用也会直接报错而不是偷偷搞事铁律free之后立刻p NULL这个习惯能救你无数次。坑4字符串那个看不见的 \0坑了无数人错误写法数组只留了5字节charstr[5];strcpy(str,hello);// 溢出hello看起来是 5 个字符但在 C 语言里字符串必须以\0结尾实际占6 字节。溢出的那个\0会覆盖相邻内存这就是经典的缓冲区溢出漏洞——大量安全攻击的根源。正确写法预留结束符的位置// 方法一数组多开1字节charstr[6];strcpy(str,hello);// 方法二用 strncpy 更安全charstr[6];strncpy(str,hello,sizeof(str)-1);str[sizeof(str)-1]\0;记住字符串永远多留 1 字节给\0这是 C 语言字符串处理的底线。坑5switch没写break老手也翻车错误写法每个 case 都没写 breakswitch(color){caseRED:printf(红色\n);caseGREEN:printf(绿色\n);caseBLUE:printf(蓝色\n);}如果color是RED输出会是红色、绿色、蓝色全部打印。因为 C 语言的switch是穿透的不写break就会一直往下执行。这个坑连写了好几年的老手偶尔也会踩到尤其是加班到凌晨的时候。正确写法每个 case 都加 breakswitch(color){caseRED:printf(红色\n);break;caseGREEN:printf(绿色\n);break;caseBLUE:printf(蓝色\n);break;}例外情况有时候穿透是故意的比如多个 case 共用一段逻辑但必须加注释说明否则后人会以为是 bug。坑6sizeof对指针和数组结果完全不同错误写法在函数里用 sizeof 求数组长度voidprint_arr(intarr[]){intlensizeof(arr)/sizeof(arr[0]);// 错误结果不是你想要的}数组作为函数参数时会退化为指针。sizeof(arr)在函数内部得到的是指针的大小4 或 8 字节不是数组的总大小。这个坑非常隐蔽编译不报错只是算出来的长度完全不对。正确写法数组长度必须在传参时一并传入voidprint_arr(intarr[],intlen){for(inti0;ilen;i){printf(%d ,arr[i]);}}// 调用时intdata[]{1,2,3,4,5};intlensizeof(data)/sizeof(data[0]);// 这里算才是对的print_arr(data,len);记住数组传参 传指针。想知道长度必须显式传入。坑7malloc不检查返回值等于给自己埋雷错误写法不检查 malloc 是否成功int*p(int*)malloc(1000000000*sizeof(int));*p10;// 如果 malloc 失败返回 NULL直接崩溃当内存分配失败时malloc返回NULL。如果你不检查就解引用就是空指针访问程序直接段错误。这种 bug 在开发环境内存充足下很难复现到了生产环境才爆——最难查的那种。正确写法每次 malloc 都检查返回值int*p(int*)malloc(1000000000*sizeof(int));if(pNULL){perror(内存分配失败);return-1;}*p10;铁律malloc之后必须先检查NULL再使用。没有例外。坑8运算符优先级——你以为的顺序不是实际的顺序错误写法想判断 flag 的某一位是否为 1if(flagsFLAG!0)// 实际执行的是 flags (FLAG ! 0)!的优先级高于所以实际先算FLAG ! 0结果为 1再用flags 1。和你的本意完全不同。C 语言有15 个优先级层次没人能全记住。正确写法加括号别指望记忆if((flagsFLAG)!0)原则遇到位运算、逻辑运算混合的表达式永远加括号。这不是水平问题是态度问题。写在最后C 语言的坑远不止这 8 个但这 8 个是最常踩的。它们的共同特点是编译不报错运行可能不报错但结果一定不对。记住几条铁律赋值和比较分开常量放左边数组循环用别用free之后立刻NULL字符串永远多留 1 字节switch每个case都加break数组传参必须带长度malloc必须检查返回值位运算加括号别背优先级C语言不会保护你但你可以保护自己。
1. Kali Linux渗透测试平台深度解析作为信息安全领域的瑞士军刀,Kali Linux早已成为渗透测试和网络安全评估的标准工具集。这个基于Debian的Linux发行版集成了600多款专业工具,从信息收集到漏洞利用,从密码破解到数字取证,几乎覆盖…
📅 2026/7/23 4:36:53
1. 车机系统对决:Flyme Auto vs 零跑A10 8295平台当吉利星愿遇上零跑A10,这场车机系统之争远比表面看到的更复杂。作为同时体验过两套系统的老司机,我发现真正的差异不在于硬件参数的简单对比,而在于人机交互逻辑的底层设计。Flym…
📅 2026/7/23 4:36:53
实现cookie攻击先写成这样留个记录后边再改
📅 2026/7/23 4:36:53
C语言变量
程序运行中,变量的值可以发生改变,为了这个变量申请了一段内存 空间,可以改变变量的值可以通过向存储空间中附值来改变变量的值,空间的大小由数据类型决定常量是直接写到指令中的,CPU要运行程序需要指令与数…
📅 2026/7/23 5:58:17
1. 项目概述与核心价值在嵌入式开发领域,串口通信(UART)堪称工程师的“瑞士军刀”。无论是调试信息输出、固件升级,还是与各类传感器、模块进行数据交换,UART都扮演着不可或缺的角色。它协议简单、硬件成本低、可靠性高…
📅 2026/7/23 5:58:17
RS485中继器是工业串口通信系统中的核心配套设备,主要用于解决RS485总线通讯过程中出现的信号衰减、传输距离受限、节点数量不足、工业干扰杂讯等问题,广泛应用于工业自动化、楼宇自控、安防监控、仪器仪表数据采集等场景。聚英电子485中继器设备依托成熟…
📅 2026/7/23 5:58:17
废话少说直接 开干
----简单说明一下 此机器人原理是读取qq信息拿到信息后根据你指定命令然后自己DIY 所有功能---- 简单把整个架构写出来免得创建错文件路径
/root/qqbot/
├── docker-compose.yml # 多容器编排配置(NoneBot NapCat)
├─…
📅 2026/7/23 5:58:17
WSL2 Redis Stack 完整部署教程(Windows 11)适用场景:Windows 11 开发环境,需要 RedisJSON 向量检索能力,支持 LangChain4j RAG 应用一、整体方案说明
为什么用 rootfs 离线导入而不是商店安装?
商店版 U…
📅 2026/7/23 5:58:17
说实话,刚拿到那箱东西的时候,我差点把快递盒扔了。太重了,而且包装简陋得像个废品站拆出来的。但我还是硬着头皮拆开了,毕竟为了这玩意儿,我熬夜看了半个月的评测视频,脑子都快被那些“顶级配置”、“行业颠覆者”给洗脑了。今天我不讲那些虚头巴脑的参数,就聊聊我这半…
📅 2026/7/23 5:56:58
更多请点击:
https://intelliparadigm.com
第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…
📅 2026/7/23 0:00:26
最近好多同行在群里问 geo s1230 到底值不值得买。说实话,这机器在二手市场挺火。但水很深,新手很容易踩雷。我干了十年设备维护,见过太多冤大头。今天不扯虚的,直接上干货。先说价格,心里得有底。目前成色不错的二手货,大概在一万二到一万五之间。如果低于八千,别犹豫,…
📅 2026/7/23 0:01:16
更多请点击:
https://codechina.net
第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现࿱…
📅 2026/7/23 0:01:26
1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…
📅 2026/7/23 1:06:38
1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…
📅 2026/7/23 1:06:38
更多请点击:
https://intelliparadigm.com
第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…
📅 2026/7/23 1:06:38
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/22 7:05:39
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/22 17:06:14
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/23 5:06:50