sizeof()与strlen()
概念:
strlen() 所求的字符串常量长度是不包括“/0”字符长度 ,同时strlen是根据’\0’求字符串长度的,它是一个函数。
sizeof() 是运算符,它不是函数。所求字符串常量大小包括“/0”求所占空间大小。
概念大家大概懂了,那么我们就直接代码举例吧这样一清二楚:
举例:
char str[]="Hello"; strlen(str) //5 //一般会说成长度 sizeof(str) //6 //一般会说成大小 char str[10]="Hello"; strlen(str) //5 因为str数组中还存有一个'\0';求的是str的字符串长度 sizeof(str) //10 因为求的是str空间大小 char str[5]="Hello" //会发生溢出 char str[] = { 'h','e','l','l','o' }; 'a' //一个字节 "a" 有'\0' 两个字节 cout << strlen(str) << endl;//随机值 //strlen根据'\0'求长度 cout << sizeof(str) << endl;//5 char str[10]={ 'h','e','l','l','o' };//未完全初始化 strlen(str) //5 剩下没有填充的空间,都填充上 0 '\0';所以是5 sizeof(str) //10 char str[5]={ 'h','e','l','l','o' } ;//完全初始化,所以无'\0' strlen(str) //随机值 因为没有'\0'; sizeof(str) //5 char str[10]={ 'h','e','\0','l','l','o'}; //'\0'就是数字0,不是字符'0' strlen(str) //2 sizeof(str) //10
void main() { int val = "\0\1\2\3\4\5\6\7"[3]; //这种转义字符只能是八进制 cout << val << endl; //3 char va = '\60'; //后面跟八进制数字 // '\x'表示后面跟一个16进制数 转换成对应的字符 cout << va << endl; //'0' int vac = "\48"[1];//在字符串中如果字符数字加上'\'就证明这个字符数字变成了数值数字,不然字符数字就会是对应ASCII的数值 cout << vac << endl; //56 vac = "\48"[0]; //'\4' cout << vac << endl;//4 }
介绍一种方法找到字符
char a=“0123456789ABCDEF”[size];
size是多少a就是对应的字符。size是多少时就要取该下标的字符
void main() { char str[10]; //没有进行初始化里面的元素可能是随机值 for(int i=0;i<5;i++) { str[i] = 'a' + i; } cout << strlen(str) << endl;//随机值 //因为没有初始化所以数组里面是随机值所以可能没有'\0'; cout << sizeof(str) << endl;//10 } char str[10];//因为是全局变量所以提前会将元素初始化为0 void main() { for(int i=0;i<5;i++) { str[i] = 'a' + i; } cout << strlen(str) << endl;//5//因为元素全部为0,所以就相当于有'\0'; cout << sizeof(str) << endl;//10 } void main() { static char str[10]; //静态变量提前会将元素初始化为0 for(int i=0;i<5;i++) { str[i] = 'a' + i; } cout << strlen(str) << endl;//随机值 //因为元素全部为0,所以就相当于有'\0'; cout << sizeof(str) << endl;//10 } void main() { char *str="Hello"; cout<<strlen(str)<<endl;//5 //字符串常量有'\0',所以不变 cout<<sizeof(str)<<endl;//4 因为是指针类型所以是4字节 char *sp="Hello"; cout << strlen(sp) << endl;//5 cout << sizeof(*sp) << endl;//1 //*sp值为'H' } void fun(char str[]) //str[10]将退化为指针相当于char*str, { cout<<strlen(str)<<endl;//5 cout<<sizeof(str)<<endl;//4 } void main() { char str[]="Hello"; cout<<strlen(str)<<endl;//5 cout<<sizeof(str)<<endl;//6 fun(str); } short *ar[10][10]; //指针数组 void main() { cout<<sizeof(ar)<<endl;//400 }
请大家认真仔细看看上述的举例,你就会了结所以的strlen() and sizeof()的陷阱和漏洞。要仔细哦!