您的位置:首页 > 其它

strlen /sizeof/ 0,'\0','0'中的陷阱+补充字符串字符数与数组大小相等

2017-10-29 18:25 337 查看
#include<string.h>

main()
{
char x[]="STRING";
x[0]=0; x[1]='\0';x[2]='0';
printf("%d %d\n",sizeof(x),strlen(x));  //结果为7,0

}
strlen遇到数据 0b0000 0000 就停止计数,也就是字符 \0 或者数字 0

一旦char[]="STRING",这时候分配的内存7字节,之后无论怎么修改如何赋值都不会改变

字符串是借助于字符型一维数组来存放的,'\0'ASCLL代码值为0,它作为标志占用存储空间但不记入串的实际长度,所以用来作为字符串的结束标志
所以数字0跟'\0'的效果一样 

char t1[4]="1234";
char t2[4]="2345";
char t3[4]="3456";

char *p = t2;

a = strlen(p);  //结果是10,此结果不一定是10,余具体内存分配有关,此处内存分布如下图
a = strlen(t2); //结果同上
a = *p;



keil mdk连续分配内存,高位到低位为t3 t2 t1 之后还有数据

由于t2数组初始化时,4个空间刚好填满,没有为‘\0’留出空间,strlen()会一直统计,直到遇到八位数据0b0000 0000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐