strncpy
拷贝n个字符到目标字符串中
函数原型
char*strncpy(char*dest,constchar*source,size_tcount);
参数讲解
参数 | dest | source | count |
解析 | 目标字符串地址 | 以 Null 结尾的源字符串地址 | 拷贝字符的个数 |
返回值讲解
函数返回目标字符串,没有返回值就是拷贝失败。
函数讲解
我们先看一下strcpy函数的错误使用
当sorce中字符个数多于dest所开辟的空间时,用strcpy拷贝编译器就崩溃。
(关于strcpy具体细节请参考:strcpy函数详解)。
为了避免上述情况,就诞生strncpy函数!
strncpy比strcpy多了一个count参数,当我们在使用strncpy就会考虑目标空间到底能放几个字符,所以strncoy函数就会比strcpy变得相对安全一点。我会分两个使用场景来介绍strncpy
(1)一般使用场景
当我们指定sorce中3字符拷贝到dest中的时,如下,就会覆盖dest中的前三个字符
(2)特殊使用场景(错误)
当然strncpy安全也是相对的,当拷贝字符串的个数超过源字符串中的个数时,就会出现下面的特殊情况
sorce中只有3个字符,而strncpy中却要拷贝5个字符到的dest中。虽然sorce中字符不够,但是strncpy可不管这么多,先把'q' 'w' 'e'拷贝到dest中去,然后用补'\0'够五个字符。
我们平常不要乱用strncpy,要按照实际需要来写,当然拷贝参数更不要超过sorce中字节个数,要不然就要越界访问了。