sizeof()与strlen()
Posted ycw1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()的陷阱和漏洞。要仔细哦!
以上是关于sizeof()与strlen()的主要内容,如果未能解决你的问题,请参考以下文章