C函数篇(strncpy函数)

strncpyC语言的函数之一,来自 C语言标准库,定义于 string.h,char *strncpy(char *destin, char *source, int maxlen),把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中

格式:

头文件:#include<string.h>
 
char * strncpy ( char *dest, char *src,size_tn);

功能:

(c/c++) 复制字符串src中的内容(字符,数字、汉字....)到字符串dest中,复制多少由size_tn的值决定。若是src的前n个字节不含NULL字 符,则结果不会以NULL字符结束。若是src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。src和dest所指内存区域不能够重 叠且dest必须有足够的空间来容纳src的字符长度+'\0'。举例:
1 #include<stdio.h>
2 #include<string.h>
3 int main()
4 { char name[]={"Chinanet"},dest[20]={};
5 strncpy(dest,name,9);
6 printf("%s\n",dest); }

1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)c++

若是n>src因为长度达到src NULL,正常复制,特别注意,若是src中有NULL,strncpy复制到NULL即便没到n也提早中止。若是n = src串长度,与strcpy一致。注意n的选择当n > dest串长度,dest栈空间溢出产生崩溃异常。
2)src串长度>dest串长度
若是n =dest串长度,则dest串没有NULL字符,会致使输出会有 乱码。若是不考虑src串复制完整性,能够将dest 最后一字符置为NULL。
综上,通常状况下,使用strncpy时,建议将n置为dest串长度(除非你将多个src串都复制到dest 数组,而且从dest尾部反向操做),复制完毕后,为保险起见,将dest串最后一字符置NULL,避免发生在第2)种状况下的输出乱码问题。固然喽,不管是strcpy仍是strncpy,保证dest串容量(能容纳下src串)才是最重要的。

strcpy和strncpy的区别

strcpy只是复制字符串,但不限制复制的数量。很容易形成缓冲溢出。strncpy要安全一些。
strncpy可以选择一段字符输出,strcpy则不能例如:
1 char name[]={"Chinanet"},dest[20]={};
2 strncpy(dest,name,9);
3 printf("%s\n",dest);
4 strncpy可实现strcpy的字符串复制:
5 char name[]={"Chinanet"},dest[20]={};
6 strncpy(dest,name,sizeof(name));
7 printf("%s\n",dest);
相关文章
相关标签/搜索