strlen函数

举报
悦来客栈的老板 发表于 2020/12/29 22:31:59 2020/12/29
【摘要】 #include <stdio.h> size_t strlen(const char *string){//通过这函数可知,对于一个未初始化的字符数组,求它的字符串长度是不对的,也是不可知的。 size_t length; for(length = 0; *string++ != '\0';) { length+=1;//遍历整个字符串,直到遇到空字符 } re...

  
  1. #include <stdio.h>
  2. size_t strlen(const char *string)
  3. {//通过这函数可知,对于一个未初始化的字符数组,求它的字符串长度是不对的,也是不可知的。
  4. size_t length;
  5. for(length = 0; *string++ != '\0';)
  6. {
  7. length+=1;//遍历整个字符串,直到遇到空字符
  8. }
  9. return length;
  10. }
  11. int main()
  12. {
  13. char a[100];
  14. gets(a);
  15. printf("The lenth of array a is:%d\n",strlen(a));
  16. return 0;
  17. }


linux下的源码



  
  1. /**
  2. * strlen - Find the length of a string
  3. * @s: The string to be sized
  4. */
  5. size_t strlen(const char *s)
  6. {
  7. const char *sc;
  8. for (sc = s; *sc != '\0'; ++sc)
  9. /* nothing */;
  10. return sc - s; //利用指针的特性
  11. }

也可以用递归实现



  
  1. size_t strlen(const char *s)
  2. {
  3. if (*s == '\0')
  4. {
  5. return 0;
  6. }
  7. return 1+strlen(s+1);
  8. }


 

CSDN上某牛人用汇编写的


  
  1. int __fastcall strlen(const char *string){
  2. __asm {
  3. xor eax, eax //寄存器清零
  4. mov ecx, string //地址传递ecx
  5. count:
  6. cmp DWORD PTR [ecx], 0 //与0比较
  7. je return //如果是0,则跳转至return
  8. inc ecx //否则增加ecx,指向下一个字符
  9. jmp count //继续比较
  10. return:
  11. mov eax, ecx //现地址传递eax
  12. mov ecx, string //原地址传递ecx
  13. sub eax, ecx //两个地址相减,就是长度
  14. }
  15. }//eax存放返回结果


 


 这个思路也不错

 


  
  1. int strlen(const char *string)
  2. {
  3. __asm
  4. {
  5. push string
  6. }
  7. while(*string++)
  8. ;
  9. __asm
  10. {
  11. mov eax, string
  12. pop ebx
  13. sub eax, ebx
  14. dec eax
  15. }
  16. }



 

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/11784859

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。