strncpy使用说明

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拷贝时,可能会导致截断,但程序不会崩溃。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值