#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
}
}