strncpy使用说明

xiaoxiao2021-02-28  17

strncpy函数原型

编辑 函数原型char *strncpy(char *dest,char *src,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 2 3 4 5 6 7 8 #include<stdio.h> #include<string.h> int  main(){ char  name[]={ "Chinanet" },dest[20]={}; strncpy (dest,name,3); dest[3]= '\0' ; //没有会乱码 printf ( "%s\n" ,dest); } 1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符) 如果n>src,只复制src的前n个字符;如果n = src串长度,则与strcpy一致;如果n>src,正常复制,特别注意,如果src中有NULL,strncpy复制到NULL即使没到n也提前停止。注意n的选择:当n > dest串长度,dest栈空间溢出产生崩溃异常。 2)src串长度>dest串长度 如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑src串复制完整性,可以将dest 最后一字符置为NULL。 总结: 1.  一般情况下,使用strncpy时,建议将n置为dest串长度(或者取sizeof(dest)-1 ),复制完毕后,为保险起见,将dest串最后一字符置NULL,避免发生在第2)种情况下的输出乱码问题。 2. 也先定义并初始化char str[MAX + 1] = {0}; 如果在程序中间需要再往str中拷贝串,一定要用memset清零。使用格式为:strncpy(dest,src, sizeof(dest) - 1) 。 3.strncpy拷贝的是字符,不拷贝串,所以最后一个\0没有拷贝,所以,拷贝的时候需要对串进行清零处理,一定要养成好习惯。        4.strncpy拷贝时,可能会导致截断,但程序不会崩溃。
转载请注明原文地址: https://www.6miu.com/read-2300354.html

最新回复(0)