strncpy 是 C语言的库函数之来自一,来自 C语言标准库,定义于 string.h,char *s360百科trncpy(char *dest, const char *跳随肥热则贵命全src, int n),把src所指向的字符串计领伟中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest一频那架来无。
- 中文名 strncpy
- 属于 库函数
- 来自 C语言标准库
- 适用 电脑编程
- 头文件 #include<string.h>
格式
函数原型char *来自strncpy(char *dest,char *src,int size_t n);
功能
功能讲解
(c/c++)复制字符串src中的内容(字符,数字、汉字....)到字符串dest中,复制多少由size_t n的值决定。如果src的前n个字符不含NULL字符,则结果不会以NULL字符结束。如果n<src的长度,只是将src的前n个字符复制到dest的前n个字符,不自动添加'\0',也就是结果dest不包括'\0',需要再手动添加一个'\0'。如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符长度+'\0'。举例:
1)亲地src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)
如果n>src由于长度达到src NULL,正常复制,特别注意,如果src中有NULL,s妈介的影达当trncpy复制到NULL即使没到n也提前停止。如果n = src串长度,与strcpy一致。注意n的选择当n > dest串长度,dest栈空间溢出产生崩溃异常。
2)src串长度>dest串长360百科度
如果n =dest串长度,则dest串没有NULL字符,会导致输使技学万志动宽出会有乱码。如果不考虑src串复制完整性,可以将dest 最后一字符置为NULL。
综上,一般情况下,使用strncpy时,建议将n置为dest串长度(除非你将多个src串都复制到dest数组,并且从dest尾部反向操作),复制完毕后,为保险起见,将dest串最后一字符置NULL,避会牛十小逐误免发生在第2)种情况下的输出乱码问题。当然喽,无论是strcpy还是strncpy,保证dest她因迅身玉串容量(能容纳下src串)才是最重要的。
功能概括
简而言之,就是把src指向的字符串的前size_t n载剧攻获某个字符(不包括\0,\0扬现业鲁活头政针当怕得自己手动加在*dest被复制之功体倒报后)复制到dest指向的字歌密科快预过符串中。如果要复制次头蒸富的*src的部分有\0,就把\0复密投章制进去,之后就提前结束结线政开,即使没复制到第size_t n个字符也是。返回指向*dest的指针。
区别
纸之什毛补入烈 strcpy只是复制字符消老命建课则劳至耐治耐串,但不限制复制的数量,很容易造成缓冲溢出。strncpy要安全一些。
strncpy能够选择一段字符输出,strcpy则不能。例如:
char name[]="Chinan春鲜石力且劳守销汽et",dest[20]={0};
strncpy来自(dest,name,9);
printf("%s\n",dest);
strncpy可实现strcpy的字符串复制:
char name[]="Chinanet",dest[20]={0};
strncpy(dest,n360百科ame,sizeof(name));
p候少物面功rintf("%s\n",dest);