strlen的小陷阱

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char a[]="12345";
char b[6]="abcde";
char c[4]={0};
printf("---------------------------NO  \\0------------------------------------\n");
printf("c:%s\n",c);
strncpy(c,b,4);
printf("c:%s\n",c);
printf("C[3]%c\n",c[3]);
printf("strlen%d\n",strlen(c));
printf("---------------------------have  \\0------------------------------------\n");
c[3]='\0';
strncpy(c,b,3);
printf("c:%s\n",c);
printf("C[3]%c\n",c[3]);
 return 0;
}

这个可以充分理解小陷阱

具体的原理我没有去探究

但是,我们可以知道在计算strlen的时候 是 '\0'结束的但是我们strncpy的时候可能没有包含'\0',

然后在使用 strlen 是一个非常危险的操作

这里要谨记

建议strncpy的时候添加检测 '\0'

最重要的部分是:

如果使用了strlen() 计算 字符串的长度lengthb。

malloc申请的时候 malloc(strlen( charvar))这个是错误的。

原因(1)strlen( charvar) 不包含'\0'在内

       (2)char * test=(char *) malloc(strlen( charvar))申请的长度,尽管test可以存下charvar变量的内容,但是 少了 '\0'

        程序运行是正常的,但这种方式及其不安全

正确的方式是:

char * test=(char *) malloc(strlen( charvar)+1)

 这里的printf 也可研究一下 并且 你可以直接申明但不初始化 c变量,看看什么效果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值