原理为while(*s++!=’\0’) cnt++;

首先需要了解一些基础知识:
1.数组内的存储形式为对应元素的ASCII码

2.\0代表无字符 ,注意无字符并不是数字0也不是空格
‘\0’ 单引号即代表了\0的ASCII码,而\0的ASCII码刚好为0
{
容易混淆的几个:
\0的ASCII码:0
空格的ASCII码:32
0的ASCII码:48
}

也就是说 也就是说strlen函数在遇到\0时就停止计数(即遇到ASCII码为0时),由于存储形式为ASCII码,0的ASCII码为48,所以遇到数字0时不停止计数。但是:如果我们使用了让字符变成数字的操作,这个时候就非常容易出现问题。比如 : 在100011中 , b[1]=0, 我们让 b[1] - ‘0’,让它可以表示数字。本来b[1]的存储形式为0的ASCII码,相减之后变为0,此时ASCII码被我们的操作变成了0,即无字符的状态,所以strlen函数在此停止,就会出现问题。

出现问题的代码:

#include<stdio.h>
#include<string.h>
int main(void)
{char ch[505];int sum=0;memset(ch,0,505);scanf("%s",ch);//int j=strlen(ch);for(int i=0,j=1;i<strlen(ch);i++,j++){ch[i]-='0';sum+=ch[i];printf("%d strlen(ch)=%d\n",j,strlen(ch));}//printf("%d\n",sum);return 0;
}

相应的结果:

按照预期,循环应该在i>=strlen(ch)时结束,但是我们的操作使得strlen(ch)发生变化,所以循环提前结束,导致错误发生。解决方法一般为在循环外设置变量int j=strlen(ch);

strlen函数原理相关推荐

  1. strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数

    strcpy函数: char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL ...

  2. C和汇编---sizeof运算符和strlen函数

    sizeof sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小. 程序: #include <stdio.h>int main(void) {int a=8;int b = ...

  3. C语言 strlen函数实现

    用字符串时strlen()函数是用到最多的函数之一,其作用获取是获取字符串的长度. 函数定义如下: size_t strlen(const char *s); 代码实现如下: size_t Test_ ...

  4. 【C库函数】strlen函数详解

    目录 strlen ​ 函数基本原型 参数解读 返回值详解 函数用法详解 strlen 获得字符串的长度(string length)  函数基本原型 size_t strlen( const cha ...

  5. 切割字符串长度php,C++_C语言中计算字符串长度与分割字符串的方法,C语言strlen()函数:返回字符串 - phpStudy...

    C语言中计算字符串长度与分割字符串的方法 C语言strlen()函数:返回字符串的长度头文件: #include strlen()函数用来计算字符串的长度,其原型为: unsigned int str ...

  6. C语言 strlen(int),C语言 - strlen函数及int,char转换问题

    题目 intmain() { inti; chara[1000]; for(i=0;i<256;i++) a[i]=i+1; printf("len = %d\n",strl ...

  7. C语言strlen函数的模拟实现

    目录 使用计数方法实现strlen函数的模拟实现 使用递归的方式去实现 使用指针的方式去模拟实现strlen 使用计数方法实现strlen函数的模拟实现 在这里有一个assert函数这是断言,防止空指 ...

  8. 字符与字符串中的‘\0‘, ‘0‘, 0;strlen()函数求字符串长度计算方法(sizeof()验证)

    先问一个问题:如下字符串or字符数组,用strlen函数求长度各是多少? /*01*/char * str1 = "abc"; /*02*/char * str2 = " ...

  9. php回调函数原理和实例

    php回调函数原理和实例 原理 自己调用自己 称之为"递归",而不是回调 你也知道回调的关键是这个回 既然是回,那么就有一个谁是主体的问题,因为回调是往回调用的意思 我调用了函数A ...

  10. PHP strlen()函数和strpos()函数

    strlen()  函数返回字符串的长度(字符数) 代码: <?php echo strlen("Hello world!"); ?> 上面的代码将输出:12 strp ...

最新文章

  1. 2021年4月28日 深圳头条后台开发实习面试(hr面)
  2. 程序、进程、线程的关系
  3. Log4j输出格式控制
  4. 【已解决】Linux远程桌面连接-VNC
  5. 实例1:python
  6. mysql binlog mixed_MySQL Binlog三种格式介绍及分析
  7. io读取一个文件再写入socket技术_Kafka必须掌握的核心技术--为什么吞吐量大、速度快?...
  8. win11安装软件没反应怎么办 Windows11安装软件没反应的解决方法
  9. Java整人程序-电脑关机
  10. Invalid or unexpected token 报错
  11. python np float_Python astype(np.float)函数使用方法解析
  12. 微信跳跳代码php执行,微信跳一跳,能够直接运行的脚本
  13. xfce-因为面板在 kiosk 模式下运行,所以不允许作为普通用户的您更改面板配置
  14. 安装Linux虚拟机
  15. 提供在Linux上运行最新版腾讯QQ与TIM的解决方案 Easiest Way to Run QQTIM on Linux
  16. 办公室 VR 黄片,骚操作!微软 HoloLens 之父辞职!
  17. prometheus remote write for springboot 远程写入<一>
  18. element Carousel 走马灯 一次轮播3张图片(整理)
  19. 使用二进制包在生产环境部署 Kubernetes v1.13.2 集群
  20. Euraka-看这就够了

热门文章

  1. 大表哥在csdn的第一篇博客
  2. 1和new Number(1)的区别
  3. 机器认知、人机交互、边缘计算……在这里,他们谈论了关于AI的关键议题
  4. Metasploit扫描3389
  5. iOS提高开发效率的方法和工具
  6. 糖友如何选择正确的饮食计划
  7. push_back讲解
  8. “女人~,你在玩火”一个有磁性的声音说道——常用自动化测试工具
  9. Kismet:一款超强的无线嗅探器
  10. 苹果要创新,IPhone是累赘