strncpy使用中需要注意的问题

在使用c语言进行项目开发的过程中,使用strncpy对字符串进行复制操作,因为该函数可以保证拷贝过程中内存不越界,但是该函数在使用过程中需要注意,拷贝的过程中是不会拷贝最后的结束符的。

如下图所示,在使用strncpy进行拷贝之前,从flash中读出来的auth_info数组是正常的。
在这里插入图片描述

通过malloc开辟内存的onenet_info结构体内容是随机的。
在这里插入图片描述
但是拷贝的时候,虽然拷贝了字符串长度的内容,但是并没有在后面补字符串结束符标志,导致了实际使用的auth_infosn999变成了sn999N
在这里插入图片描述
所以在使用strncpy的时候,要么在拷贝完成了进行一个补字符串结束符的操作,要么在开辟内存空间的时候,使用calloc函数,可以理解为是malloc+memset的组合,这样可以保证空间内容全都是0,不需要手动补0了。

猜你喜欢

转载自blog.csdn.net/qq_27508477/article/details/108025985