当前位置: 首页 > 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


http://www.mrgr.cn/news/23922.html

相关文章:

  • 后端开发面经系列--百度内容生态C++一面
  • 操作系统 --- 线程(Threads)概念 多线程模型 线程控制与组织
  • (Java企业 / 公司项目)点赞业务系统设计与完成
  • HAProxy--高性能反向代理
  • Windows远程桌面授权远程代码执行漏洞CVE-2024-38077(POC、EXP)
  • 6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)
  • GitLab CI Runner安装
  • HTML/CSS/JS学习笔记 Day4(HTML--C3 表格)
  • 交换技术是一种在计算机网络和通信系统中广泛应用的关键技术,它主要通过交换设备(如交换机、路由器等)实现数据的转发和传输
  • 面试题—Java基础
  • 具有RC反馈电路的正弦波振荡器(文氏桥振荡器+相移振荡器+双T振荡器)
  • Linux学习-ELK(一)
  • MybatisPlus的学习
  • LLM大模型学习:AI大模型原理、应用与未来趋势!
  • 如何在使用窗口函数的时候使用groupby
  • 02 Docker基本管理
  • 数据结构 | 深入理解顺序表与链表
  • Python 数学建模——方差分析
  • Java+vue的医药进出口交易系统(源码+数据库+文档)
  • Java中的常用类及包装类