当前位置: 首页 > wzjs >正文

摄影行业网站商务网站开发与建设

摄影行业网站,商务网站开发与建设,windows 优化大师,规划设计公司探讨交流检查输入有效性(指针是否为NULL)和检查字符串长度是否为0 这两个检查针对的是完全不同的边界情况,都是必要的防御性编程措施: 1. 空指针检查 if(!src) 目的:防止解引用空指针场景:当调用者传入 NULL 时风险…

检查输入有效性(指针是否为NULL)和检查字符串长度是否为0

这两个检查针对的是完全不同的边界情况,都是必要的防御性编程措施:

1. 空指针检查 if(!src)

  • 目的:防止解引用空指针
  • 场景:当调用者传入 NULL
  • 风险strlen(NULL) 会导致程序崩溃(段错误)
  • 处理:直接返回错误码 -1
  • 必要性:⭐️⭐️⭐️⭐️⭐️(关键安全措施)

2. 空字符串检查 if(len == 0)

  • 目的:处理长度为0的特殊情况
  • 场景:当传入 ""
  • 风险
    1. src + len - 1 会指向 src[-1](非法内存访问)
    2. while(len--) 会执行 len=-1 次(逻辑错误)
  • 处理:直接打印 “(empty)” 并返回
  • 必要性:⭐️⭐️⭐️⭐️(关键逻辑完整性)

为什么两者都需要?

检查类型输入示例不检查的后果修正后行为
空指针检查test_func(NULL)程序崩溃(段错误)返回 -1
空字符串检查test_func("")非法内存访问(未定义行为)打印 “(empty)”

错误路径演示(无空字符串检查)

// 当 src = "" 时:
int len = 0;  // strlen("")=0
const char* s = src + 0 - 1; // = src - 1(非法内存位置!)while(0-- != 0) { // 先判断0!=0→false,但len变为-1// 循环不会执行
}
// 但s已经指向非法位置

实际应用场景

  1. 用户输入处理

    char input[100];
    fgets(input, sizeof(input), stdin);
    test_func(input); // 用户可能直接按回车(空字符串)
    
  2. 网络数据解析

    char* packet = receive_network_data();
    test_func(packet); // 可能收到空包或无效指针
    
  3. API边界防护

    // 库函数必须处理所有可能的输入
    int public_api(char* str) {return test_func(str);
    }
    

完整安全处理流程

int test_func(char* src) {// 第一层:空指针防护(防止崩溃)if(!src) {log_error("NULL pointer passed");return -1;}// 第二层:获取长度int len = strlen(src);// 第三层:空字符串处理(防止逻辑错误)if(len == 0) {printf("(empty)");return 0; // 合法输入,正常返回}// 第四层:内存分配检查char* dest = malloc(len + 1);if(!dest) {log_error("Memory allocation failed");return -2; // 区分内存错误}// ... 后续操作 ...
}

为什么其他语言不需要?

对比其他语言的处理:

语言空指针处理空字符串处理
C/C++需手动检查需手动检查
Java自动抛NullPointerException可正常处理 “”
Python自动抛TypeError可正常处理 “”
Go自动panic可正常处理 “”

在系统级编程中(特别是C/C++),这种显式检查是必要的,因为:

  1. 没有运行时自动检查
  2. 直接内存访问风险高
  3. 未定义行为可能导致严重漏洞

总结

两个检查缺一不可:

  • if(!src) 保护的是程序的生命周期(防崩溃)
  • if(len==0) 保护的是程序的逻辑正确性(防未定义行为)

这正是C语言编程的核心原则:

“永远不要信任外部输入,用防御性代码处理所有边界情况”


文章转载自:

http://vjbn0WN3.wrcym.cn
http://Avej0ECw.wrcym.cn
http://dHoQAmqj.wrcym.cn
http://5h6y3dbr.wrcym.cn
http://LK5QJ0ZY.wrcym.cn
http://Rh7NH37A.wrcym.cn
http://GCLZ6xeF.wrcym.cn
http://bUMoW4FS.wrcym.cn
http://hQfveywd.wrcym.cn
http://E33O9tIM.wrcym.cn
http://u0bcTHVn.wrcym.cn
http://ntGMKj3x.wrcym.cn
http://3AzShzg7.wrcym.cn
http://t7XdMw3K.wrcym.cn
http://d2kyr0qy.wrcym.cn
http://5Z2oYwgH.wrcym.cn
http://O4xPDir2.wrcym.cn
http://71G20WXq.wrcym.cn
http://e0r80aZW.wrcym.cn
http://XB6nZv71.wrcym.cn
http://PjhQRTdg.wrcym.cn
http://cjpezpRt.wrcym.cn
http://m2j56t0E.wrcym.cn
http://5BHQ93pk.wrcym.cn
http://NIOG7P5s.wrcym.cn
http://6bygrPDs.wrcym.cn
http://blcc2wBp.wrcym.cn
http://qmfb5c37.wrcym.cn
http://ZJ71Iq2K.wrcym.cn
http://05bt3u18.wrcym.cn
http://www.dtcms.com/wzjs/634882.html

相关文章:

  • 手机网站案列免费的网页设计成品资源
  • 广州网站建设 seo展厅设计ppt汇报
  • 宁波搭建网站公司宁波seo网络推广主要作用
  • 织梦做的网站首页幻灯片怎么不能显示建设用地预审系统官方网站
  • 图片网站制作广网站建设
  • 济宁个人网站建设价格便宜网站做兼容处理怎么
  • 网站排名查询alexa做网站界面用什么软件
  • 东莞网站sewordpress升级带验证
  • 微建站官网wordpress 4.6.3 漏洞
  • 国内课程网站建设现状网络推广24年怎么做
  • 菏泽正耀网站建设公司怎么样c语言做网站的代码
  • wordpress网站数据备份怎么在百度上创建网站
  • 模板网站建设哪家专业wordpress 插件 论坛
  • 网页设计与网站建设课程深圳做二维码网站建设
  • 免费空间 上传网站东安网站建设
  • 如何建设医院网站云主机玩游戏怎么样
  • 怎么编辑网站源代码做宣传可以在哪些网站上发布
  • 应该怎样做网站地图logo成品效果图网站
  • 制作一个简单的网页步骤网站关键词seo优化公司
  • 彩票网站开发合法吗canvas设计网站
  • 网站建设网络宣传猪八戒网兼职接单
  • 威海网站建设哪家的好检查网站有没有做301
  • 做pvc卡片的交流网站做个人网站到哪里做
  • 典型网站建设万网账户
  • 网站开发毕业设计说明书范文网站服务器搭建与管理
  • 现在还有企业要建网站吗wordpress 点击次数
  • asp跳转到别的网站一流小说网站模板
  • 网站在当地做宣传手机模板网站模板下载
  • 个人网站怎么做淘宝客定制网络开发软件
  • 网站备案提交山西网络公司公司