利用strlen和sizeof求取字符串长度注意事项
2015-08-18 16:41
274 查看
首先,strlen是函数,sizeof是运算操作符,二者得到的结果类型为size_t,即unsigned int类型。大部分编译程序在编译的时候就把sizeof计算过了,而strlen的结果要在运行的时候才能计算出来。
对于以下语句:
char *str1 = "asdfgh";
char str2[] = "asdfgh";
char str3[8] = {'a', 's', 'd'};
char str4[] = "as\0df";
执行结果是:
sizeof(str1) = 4; strlen(str1) = 6;
sizeof(str2) = 7; strlen(str2) = 6;
sizeof(str3) = 8; strlen(str3) = 3;
sizeof(str4) = 6; strlen(str4) = 2;
str1是字符指针变量,sizeof获得的是该指针所占的地址空间,32位操作系统对应4字节,所以结果是4;strlen返回的是该字符串的长度,遇到'\0'结束,'\0'本身不计算在内,故结果是6。
str2是字符数组,大小由字符串常量"asdfgh"确定,sizeof获得该数组所占内存空间大小,包括字符串结尾的'\0',所以结果为7;strlen同理返回6。
str3也是字符数组,但大小确定为8,故sizeof得到的结果是8;strlen统计'\0'之前所有字符的个数,即为3;
str4是常量字符数组,sizeof得到字符总数即6;strlen计算至'\0'结束,因此返回2;
总结一句就是sizeof计算的是变量的大小,而strlen计算的是字符串的长度,前者不受字符'\0'影响,后者以'\0'作为长度判定依据。
对于以下语句:
char *str1 = "asdfgh";
char str2[] = "asdfgh";
char str3[8] = {'a', 's', 'd'};
char str4[] = "as\0df";
执行结果是:
sizeof(str1) = 4; strlen(str1) = 6;
sizeof(str2) = 7; strlen(str2) = 6;
sizeof(str3) = 8; strlen(str3) = 3;
sizeof(str4) = 6; strlen(str4) = 2;
str1是字符指针变量,sizeof获得的是该指针所占的地址空间,32位操作系统对应4字节,所以结果是4;strlen返回的是该字符串的长度,遇到'\0'结束,'\0'本身不计算在内,故结果是6。
str2是字符数组,大小由字符串常量"asdfgh"确定,sizeof获得该数组所占内存空间大小,包括字符串结尾的'\0',所以结果为7;strlen同理返回6。
str3也是字符数组,但大小确定为8,故sizeof得到的结果是8;strlen统计'\0'之前所有字符的个数,即为3;
str4是常量字符数组,sizeof得到字符总数即6;strlen计算至'\0'结束,因此返回2;
总结一句就是sizeof计算的是变量的大小,而strlen计算的是字符串的长度,前者不受字符'\0'影响,后者以'\0'作为长度判定依据。
相关文章推荐
- gcc 关于 -lpcap 参数
- Delphi 版本号(D1到XE6),发现一个delphi.wikia.com网站
- javascript函数 第14节
- 前端攻城狮学习笔记九:让你彻底弄清offset
- 如何解决局域网中Windows防火墙不能访问Oracle问题!
- CAD教程--嵌入表格
- Android中使用Handler造成内存泄露
- HDU 5399 Too Simple(过程中稍微用了一下dfs)——多校练习9
- 远在美国的凤姐为何选择回国理财?
- poj3279 Fliptile (dfs搜索)
- 前端开发的经验
- hdu 4109 Instrction Arrangement(关键路径)
- POJ 3352--Road Construction【无向图增加最少的边成为边双连通图 && tarjan求ebc && 缩点构造缩点树】
- matlab的数据可视化
- 写一个android内置android程序
- [hihocoder]01背包 accept 与 time limit exceed的代码比较
- [Java] String类, StringBuffer类
- 黑马程序员_GUI
- The Pilots Brothers' refrigerator(POJ_2965)
- 类(继承)的内存分配详解