关于字符串常用函数strncpy strcpy strcat等(持续完善)

news/2024/6/17 2:52:31

发现 strncpy 函数是个大坑,提醒大家慎用(转载)

【C语言】发现 strncpy 函数是个大坑,提醒大家慎用 (amobbs.com 阿莫电子论坛 - 东莞阿莫电子网站)

 char *strncpy( char *dst, const char *src, size_t count );

我遇到的问题:char arr[5] ;char brr[8];   strncpy(arr, brr, 4); 

当arr非空(包括arr[0]==0其他位有非空的情况),brr不溢出的话,是正常的,只复制4位到字符串arr。   但是brr溢出的话,arr的第五位就也会被赋值,然后arr也会溢出。

当arr为空(即所有位都是'\0'),那么不论brr是否溢出,都正常,运行完strncpy,arr[4]都是'\0',不会被溢出。

解决方式:方式一:在strncpy前面添加 memset(arr, 0, sizeof(arr)); 每次都把arr字符串清空,就正常了。

方式二:在strncpy语句后面加上arr[4] = 0; 主动给字符串添加 结束标志。

两个一起用,双重保险。

方式三:保证brr不溢出。


http://www.niftyadmin.cn/n/698553.html

相关文章

【javascript】javascript数组函数 总结

目录 push() pop() shift() unshift() concat() join() slice() splice() sort() reverse() push() 作用:将一个或多个元素添加到数组的末尾,并返回新数组的长度。 const arr [1, 2, 3]; const newLength arr.push(4, 5); console.log(arr); …

数据备份技术------概述与总结

数据备份技术------概述与总结 数据备份技术------概述与总结备份技术的发展(组网方式)1、Host备份方式2、LAN备份方式3、LAN-free备份方式(SAN)4、Server-free备份方式5、Sever-less备份方式 备份技术的发展(主流备份…

el-table多级表头处理方法,了解lebel和prop的真实含义,template的意义,减少全局定义变量。

Element - The worlds most popular Vue UI framework 官网地址 其原理只需要在 el-table-column 里面嵌套 el-table-column&#xff0c;就可以实现多级表头。 要实现的效果如下图所示&#xff1a; <div class"c-table" id"tablePrint"><el-tabl…

医疗多模态大模型

记录各个医疗领域中的各个多模态大模型&#xff1b; 1. OpenMEDLab浦医 https://github.com/OpenMEDLab “OpenMEDLab浦医”将于近期逐步开源&#xff0c;覆盖医学图像、医学文本、生物信息、蛋白质工程等10余种医疗数据模态&#xff0c;促进基于医疗基础模型的跨领域、跨疾病…

(小程序)指定问题换一批功能实现

(小程序)指定问题换一批功能实现 vue3写法 html <view class"title"><p>推荐问题</p><view class"refresh" click"onRefresh"><text>换一批</text><image src"https://cdn.tudb.work/aios/web/im…

【NOSQL数据库】Redis数据库的配置与优化一

目录 一、关系型数据库与非关系型数据库1.1关系型数据库1.2非关系型数据库1.3关系型数据库与非关系型数据库的区别1.3.1数据存储方式不同1.3.2扩展方式不同1.3.3对事务性的支持不同 1.4非关系型数据库产生的背景1.5总结 二、Redis简介2.1Redis的优点2.2使用场景2.3哪些数据适合…

记录生产mysql死锁解决过程

最近生产上每个星期都会有几次死锁告警异常&#xff0c;今天终于给处理了&#xff0c;待后续观察&#xff0c;记录下整个过程。 环境&#xff1a;springboot、mybatis、mysql(RC隔离级别) 表结构&#xff1a; CREATE TABLE table1 (id bigint NOT NULL AUTO_INCREMENT,prize…

【conda activate XXX】报错,source activate xxx可以

&#x1f438;&#x1f438;运行conda activate XX报错&#xff1a; $ conda activate openmmlabCommandNotFoundError: Your shell has not been properly configured to use conda activate. If your shell is Bash or a Bourne variant, enable conda for the current us…