本文主要是介绍关于strncpy的使用说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原型:
char * strncpy(char *dest, char *src, size_t n);
功能:
将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是直到复制完第n个字符才停止,不管途中是否遇到了NULL,即在n个字符内会连同NULL一起复制),返回指向dest的指针。
头文件:
#include "string.h"
如果n > dest串长度,dest栈空间溢出。
否则:
1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)
如果n=(0, src串长度),src的前n个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。
如果n = src串长度,与strcpy一致。
如果n = dest串长度,[0,src串长度]处存放于desk字串,(src串长度, dest串长度]处存放NULL。这是strncpy跟strcpy的重点区别。
如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑src串复制完整性,可以将dest最后一字符置为NULL。
综上,一般情况下,使用strncpy时,建议将n置为dest串长度(除非你将多个src串都复制到dest数组,并且从dest尾部反向操作),复制完毕后,
为保险起见,将dest串最后一字符置NULL,避免发生在第2)种情况下的输出乱码问题。
核心点是:无论是strcpy还是strncpy,保证src串长度<=dest串长度才是最重要的,同时需要注意在使用中存在下面的误区:
strncpy(dest, src, sizeof(src)); //n一般不要填写sizeof(src)strncpy(dest, src, sizeof(dest)); //一般需要填写sizeof(dest),即能够拷贝的字节数跟dest最多能够容纳的一致,防止栈溢出。
这篇关于关于strncpy的使用说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!