在使用c语言进行项目开发的过程中,使用strncpy对字符串进行复制操作,因为该函数可以保证拷贝过程中内存不越界,但是该函数在使用过程中需要注意,拷贝的过程中是不会拷贝最后的结束符的。
如下图所示,在使用strncpy进行拷贝之前,从flash中读出来的auth_info
数组是正常的。
通过malloc开辟内存的onenet_info
结构体内容是随机的。
但是拷贝的时候,虽然拷贝了字符串长度的内容,但是并没有在后面补字符串结束符标志,导致了实际使用的auth_info
从sn999
变成了sn999N
。
所以在使用strncpy的时候,要么在拷贝完成了进行一个补字符串结束符的操作,要么在开辟内存空间的时候,使用calloc
函数,可以理解为是malloc
+memset
的组合,这样可以保证空间内容全都是0,不需要手动补0了。