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
相关文章推荐
- 字符串和字符数组的区别以及sizeof和strlen的区别
- C/C++中求字符串数组的大小---sizeof,strlen,string,length()
- sizeof 和 strlen 在求解数组 字符数组 字符串 二维数组时候的小结
- 一维数组,字符数组,字符串,二维数组在sizeof()和strlen()下的不同输出
- C中 字符数组和字符串以及strlen 和sizeof
- 字符串,字符指针和字符数组的sizeof和strlen
- C++11 基础之字符数组,字符串,字符指针通过sizeof、strlen求值
- 计算字符串的长度及sizeof与strlen、gets与scanf、字符数组与字符串
- 补补基础知识,关于字符串,字符数组,CString型字符串,strlen,sizeof
- C++ 数组与字符串长度sizeof()、strlen()、string的length()和size()
- 数组与字符串长度sizeof()、strlen()、string的length()和size()
- android 字符串工具类 格式化日期字符串 拼接数组 判断字符串是否为空 转换时间显示 转换文件大小 获取中英文字符个数
- 数组的大小及定义sizeof和strlen
- 求字符数组中字符串的长度strlen(自实现)
- strlen和sizeof求字符数组长度
- 字符数组,字符指针,sizeof,strlen总结
- 指针的相关运算,包括一维数组、二维数组、字符数组的sizeof、strlen运算
- C++primer 4.3 C风格字符串--字符数组(strlen、strcpy、strcat)上
- 九度oj+原始一个字符串左右交换字符最少步数变成含有2012字串+bfs及字符串和整型转换以及没有标记visit数组大小,只能用stl中的vecotr,实际上set更好。有count函数
- 字符数组,字符指针,sizeof,strlen总结