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

来源:互联网 发布:美国非农数据公布网站 编辑:程序博客网 时间:2024/05/17 08:33


#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

原创粉丝点击