Snprintf &Strncpy使用

strncpy使用

特点:

1 strncpy(des,const src,sizeof(des));
2 返回值,返回的是目的字符串;
3 性能问题,当Des长度大于Src时,strncpy 会将des中多余的字节用0 进行填充。
4 当Src长度大于Des长度时必须手工设置‘\0’。

Snprintf

特点:

    1 strncpy(des ,sizeof(des),"%s",src );
    2 返回值,返回的是实际写入的字符串的数目;
    3 性能问题,当Src长度大于Des长度时,需要扫描Src 。
    4 不可省略第三个参数"%s",隐患是,如果src中包含%,会引发core。

字符串

字符串结尾自带’\0’
字符串越界问题

字符数组 (为了节省空间资源,整型数组)

特点
1 字符初始化,多余的为0 char szBuf1[10] = {‘a’,’b’,’c’,’d’,’v’};
2 字符数组没有结束标志,必须有 ‘\0’
3 字符数组有两种输出格式,按照‘\c’ 输出 ;按照’%s’输出

测试:

1.

char szBuf1[] = "aaaaabbbbccccc";
  char szBuf2[10];
   strncpy(szBuf2,szBuf1,10);  // aaaaabbbbc@
   snprintf(szBuf2,10,"%s",szBuf1);
 //szBuf2[10]='\0';   //aaaaabbbbc
   printf("%s\n",szBuf2); 

2.

  char szBuf1[]="aaa";
  char szBuf2[10];
  strncpy(szBuf2,szBuf1,10); //aaa  0
  snprintf(szBuf2,10,"%s",szBuf1);
  printf("%c\n",szBuf2[8]);  //aaa  0 
  1. 字符串越界问题
 char szBuf1[4]={'a','b','c','d'};
//char szBuf1[5] = {‘a’,’b’,’c’,’d’};
char szBuf2[10];
strncpy(szBuf2,szBuf1,10); // abcdp abcd  
snprintf(szBuf2,10,"%s",szBuf1);  abcd p 
printf("%s\n",szBuf2);
printf("%c\n",szBuf2[8]);

4.

char szBuf1[6]={'a','b','c','d'}; 
//char szBuf1[6]={97,98,99,100,0,0};
  char szBuf2[10];
  strncpy(szBuf2,szBuf1,10);
  printf("%s\n",szBuf2); //abcd 
  printf("%c\n",szBuf2[8]); // @ 越界后 随机值 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值