设为首页收藏本站

嘻皮客娱乐学习网

 找回密码
 中文注册
搜索
打印 上一主题 下一主题
开启左侧

[面试题库] strlen的几种不同实现方法

[复制链接]
跳转到指定楼层
楼主
发表于 2014-11-30 10:06:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
int strlen(const char *str)
{
assert(str != NULL);
int len = 0;
while((*str++) != ‘\0′)
len++;
return len;
}
第二种方法:
int strlen(const char *str)
{
assert(str);
const char *p = str;
while(*p++); /*use addresses to count the length of str*/
return p – str – 1;
}
第三种方法:
int strlen(const char* str)
{
if (str[0] == ‘\0′)
return 0;
else
return strlen((char *)(&str[0]+1))+1;  /*iteration*/
}
ANSI C标准中的说法摘录如下: (1)当一个数组标识符出现在表达式中,这个标识符的类型就从“某种类型T的数组”转换成“指向类型T的指针”,而且它的值就等于数组第一个元素的地址。但是当数组标识符被用作sizeof和取址(&)操作的操作数时,sizeof返回的是整个数组的大小,而取址操作返回的是指向数组的指针(而不是指向一个值为数组头元素地址的指针的指针)。(2)下列表达式不能产生lvalue: 数组名,函数,枚举常量,赋值表达式,强制类型转换,函数调用。
回复

使用道具 举报

小黑屋|手机版|嘻皮客网 ( 京ICP备10218169号|京公网安备11010802013797  

GMT+8, 2024-4-29 20:56 , Processed in 0.157112 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表