strlen函数
【摘要】 #include <stdio.h> size_t strlen(const char *string){//通过这函数可知,对于一个未初始化的字符数组,求它的字符串长度是不对的,也是不可知的。 size_t length; for(length = 0; *string++ != '\0';) { length+=1;//遍历整个字符串,直到遇到空字符 } re...
-
#include <stdio.h>
-
-
-
size_t strlen(const char *string)
-
{//通过这函数可知,对于一个未初始化的字符数组,求它的字符串长度是不对的,也是不可知的。
-
size_t length;
-
-
-
for(length = 0; *string++ != '\0';)
-
{
-
length+=1;//遍历整个字符串,直到遇到空字符
-
}
-
-
-
return length;
-
}
-
-
-
int main()
-
{
-
char a[100];
-
gets(a);
-
printf("The lenth of array a is:%d\n",strlen(a));
-
return 0;
-
}
linux下的源码
-
/**
-
* strlen - Find the length of a string
-
* @s: The string to be sized
-
*/
-
size_t strlen(const char *s)
-
{
-
const char *sc;
-
-
for (sc = s; *sc != '\0'; ++sc)
-
/* nothing */;
-
return sc - s; //利用指针的特性
-
}
也可以用递归实现
-
size_t strlen(const char *s)
-
{
-
if (*s == '\0')
-
{
-
return 0;
-
}
-
return 1+strlen(s+1);
-
}
CSDN上某牛人用汇编写的
-
int __fastcall strlen(const char *string){
-
__asm {
-
xor eax, eax //寄存器清零
-
mov ecx, string //地址传递ecx
-
count:
-
cmp DWORD PTR [ecx], 0 //与0比较
-
je return //如果是0,则跳转至return
-
inc ecx //否则增加ecx,指向下一个字符
-
jmp count //继续比较
-
return:
-
mov eax, ecx //现地址传递eax
-
mov ecx, string //原地址传递ecx
-
sub eax, ecx //两个地址相减,就是长度
-
}
-
}//eax存放返回结果
这个思路也不错
-
int strlen(const char *string)
-
{
-
__asm
-
{
-
push string
-
}
-
while(*string++)
-
;
-
__asm
-
{
-
mov eax, string
-
pop ebx
-
sub eax, ebx
-
dec eax
-
}
-
-
}
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/11784859
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)