求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