求strlen((char*)L"abc")的值
来源:互联网 发布:淘宝代购店衣服真的吗 编辑:程序博客网 时间:2024/05/18 03:09
int i = strlen((char*)L"abc");
求 i 的值
这个题看似不起眼,但其实还是有不少考察点,如果是求strlen("abc")的值,那么想必大家都能一眼看出结果,只不过现在加了个(char*)L 情况就略有不同了
首先,字符串常量前加了个字母L,表示将字符串转换为unicode字符串,unicode编码,一个字符用2个字节,即16位来表示,那么对字符'a','b','c',分别要用0进行高位补位(原来只占8位,现在要占16位,那势必要对多余空间进行补位)。'a'原本是0x61,通过补位变成0x0061,'b',‘c'类似。如此以来 L“abc”便等同于 0x0061 0x0062 0x0063 (为节省笔墨,这里都用十六进制来表示)
然后紧接着(char*)表示又要将此unicode字符串转换成ascii编码字符串,即每个字符又要用1个字节表示,那么就需要将'a'的0x0016再拆分,拆分后变为0x16 0x00。如此以来(char*)L"abc"便等同于 0x61 0x00 0x62 0x00 0x63 0x00
到了这步,那么i的值就很明显了,我们都知道strlen的实现原理,他从参数传递进来的指针指向的字符串的第一个字符开始统计,直到遇到0结束符为止,那么上面的最终的字符串,只有0x61这个字节被统计了,紧接着的0x00导致统计结束,strlen返回1
所有 i 的值就等于1
- 求strlen((char*)L"abc")的值
- 习题:输入abc的值求一元二次方程的解
- 指向字符数组的指针 char*p="abc"和char p[]="abc"的区别。
- sizeof strlen() char * char []
- char *p="abc" 与 char p[]="abc" 的区别
- char *p="abc"与char p[]="abc"的不同
- char *p="abc" 与 char p[]="abc" 的区别
- 总算理解char *p="abc"与char p[]="abc"的不同
- char *p="abc" 与 char p[]="abc" 的区别
- char *p="abc"与char p[]="abc"的不同
- char *p="abc" 与 char p[]="abc" 的区别
- 字符串反转引发的char str[]="abc"和char *str="abc"思考
- 字符指针 char *p="abc" 与 char p[]="abc"的区别
- char *p="abc" 与 char p[]="abc" 的区别
- char *p="abc" 与 char p[]="abc" 的区别
- char *p="abc"与char p[]="abc"的不同
- char[]:strlen和sizeof的区别
- char*中sizeof和strlen的区别
- WinCE的FAL简析
- 【BZOJ2396 || POJ3318】神奇的矩阵 || Matrix Multiplication
- hook
- matlab在图像中画长方形(框)
- 总结2012年世界经济形势主要特征
- 求strlen((char*)L"abc")的值
- 七句人生规律
- 2012年中国IT 行业的发展现状分析
- OpenCasCade 从零开始到生成MFC单文档测试程序
- VS2008生成安装包问题:验证时出错。HRESULT = '80004005'
- 队列的应用—电路布线最优解问题
- LoadRunner性能测试基础知识问答
- Windows程序员进阶应该看的那些书
- 解决 unresolved external symbol 无法解析 _send@16