我是靠谱客的博主 大意鞋垫,最近开发中收集的这篇文章主要介绍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:%sn",c);
strncpy(c,b,4);
printf("c:%sn",c);
printf("C[3]%cn",c[3]);
printf("strlen%dn",strlen(c));
printf("---------------------------have  \0------------------------------------n");
c[3]='';
strncpy(c,b,3);
printf("c:%sn",c);
printf("C[3]%cn",c[3]);
 return 0;
}

这个可以充分理解小陷阱

具体的原理我没有去探究

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

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

这里要谨记

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

最重要的部分是:

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

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

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

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

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

正确的方式是:

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

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

最后

以上就是大意鞋垫为你收集整理的strlen的小陷阱的全部内容,希望文章能够帮你解决strlen的小陷阱所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部