C语言「NULL 真假分身」:90% 写错的空指针陷阱

简介: 在C语言中,`NULL`与`0`本质不同:前者是空指针常量(如`(void*)0`),后者是整数。变参函数中混用会导致崩溃;跨平台时`NULL`赋整型可能截断。安全规范:只含`<stddef.h>`后使用,指针判空用`p == NULL`,禁赋整型。

很多人以为 NULL == 0,但在 C 里,它们根本不是一回事

1. 两个完全不同的东西

  • 空指针常量:源码层面的 0(void *)0
  • 空指针:运行时、操作系统判定为无效地址的指针值

编译器会自动把空指针常量转为对应平台的空指针,但类型不一样

2. 致命暗坑:变参函数传 NULL

printf("%s", 0);   // 崩溃:传 int 0
printf("%s", NULL);// 正常:传指针空值

可变参数不做隐式转换,0 是整型,NULL 是指针,栈布局错位直接炸。

3. 隐蔽跨平台坑

32 位:指针 4 字节
64 位:指针 8 字节
直接写 int x = NULL;,64 位会截断高 4 字节,埋下随机崩溃。

极简安全规范

  1. 只包含 <stddef.h> 再用 NULL
  2. 指针判空只用:if (p == NULL) / if (!p)
  3. 永远不要把 NULL 赋值给整型变量
相关文章
|
3天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
10461 47
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
23天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
23621 121
|
9天前
|
人工智能 JavaScript API
解放双手!OpenClaw Agent Browser全攻略(阿里云+本地部署+免费API+网页自动化场景落地)
“让AI聊聊天、写代码不难,难的是让它自己打开网页、填表单、查数据”——2026年,无数OpenClaw用户被这个痛点困扰。参考文章直击核心:当AI只能“纸上谈兵”,无法实际操控浏览器,就永远成不了真正的“数字员工”。而Agent Browser技能的出现,彻底打破了这一壁垒——它给OpenClaw装上“上网的手和眼睛”,让AI能像真人一样打开网页、点击按钮、填写表单、提取数据,24小时不间断完成网页自动化任务。
2229 5