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

strncpy陷阱

最近遇到了一个strncpy的bug,他们居然说这不是bug,而我认为这是很严重的bug!

相比于strcpy来说,strncpy具有更高的安全性,但是同时会带来一个问题,就是c字符串不会自动补’\0’。

废话不多说,直接上代码!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define mian main#define CP_NUM 10int mian()
{char *str = "abcdefghijk";char *s = (char *)malloc(sizeof(char) * 20);memset(s, '5', 20);strncpy(s, str, CP_NUM);printf("%s\n", s);printf("%ld\n", strlen(s));return 0;
}

运行结果:
在这里插入图片描述

很显然,这是由于没有添加’\0’。

在我们对c字符串进行处理的时候,一定要加上’\0’。

当然如果你本身处理的是bit流,则可以不考虑这个因素。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define mian main#define CP_NUM 10int mian()
{char *str = "abcdefghijk";char *s = (char *)malloc(sizeof(char) * 20);memset(s, '5', 20);strncpy(s, str, CP_NUM - 1);s[CP_NUM - 1] = '\0';printf("%s\n", s);printf("%ld\n", strlen(s));return 0;
}

在这里插入图片描述
欢迎关注:GarenJian

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 运维问题0002:SAP多模块问题-SAP系统程序在执行时,跳出“加急快件”窗口,提示:快件文档“更新已终止”从作者***收到
  • SonicWall SSL VPN曝出高危漏洞,可能导致防火墙崩溃
  • 如何修复软件中的BUG
  • 第四章 类和对象 课后训练(1)
  • 数据看板多端查看无压力,教你轻松设置响应式布局
  • Dockerfile中的RUN、CMD、ENTRYPOINT指令区别
  • PCL-统计滤波
  • 十、组合模式
  • 计算机毕业设计选题推荐-自驾游攻略管理系统-Java/Python项目实战
  • 让PPT动起来:用python-pptx轻松添加动画效果
  • TwinCAT3 实时核中ADS实现C++ server、clinet数据传输
  • 车载以太网之SOME/IP
  • 【达梦数据库】误删数据库目录问题复现解决方式
  • JDK 8 新增特性:Lambda 表达式
  • 亚信安全出席第五届国际反病毒大会 探究AI现代网络勒索治理
  • 时间复杂度分析经典问题——最大子序列和
  • 【React系列】如何构建React应用程序
  • 【个人向】《HTTP图解》阅后小结
  • angular学习第一篇-----环境搭建
  • css布局,左右固定中间自适应实现
  • go语言学习初探(一)
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java的Interrupt与线程中断
  • Lsb图片隐写
  • MD5加密原理解析及OC版原理实现
  • Python中eval与exec的使用及区别
  • spring cloud gateway 源码解析(4)跨域问题处理
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • vue数据传递--我有特殊的实现技巧
  • yii2权限控制rbac之rule详细讲解
  • 程序员最讨厌的9句话,你可有补充?
  • 创建一种深思熟虑的文化
  • 对象引论
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 新版博客前端前瞻
  • 异步
  • Java总结 - String - 这篇请使劲喷我
  • 树莓派用上kodexplorer也能玩成私有网盘
  • 数据可视化之下发图实践
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #1014 : Trie树
  • #Z2294. 打印树的直径
  • #数学建模# 线性规划问题的Matlab求解
  • (02)vite环境变量配置
  • (day6) 319. 灯泡开关
  • (k8s)Kubernetes本地存储接入
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三)mysql_MYSQL(三)
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转) ns2/nam与nam实现相关的文件