c语言输出笑脸(’\1’)

参考博客strlen()函数的实现原理

就如上图,在程序编译执行之后,输出了笑脸符号,可是在别人的电脑中又没有显示出这个错误。也就是说同样的代码,同样的编译器,却显示不同的内容。
- 笑脸:’\1’ (有的编译器是显示空格或者一个正方形框)
- 缩写/字符:SOH(start of headline)
- 解释:标题开始
经过google,发现是因为strlen函数的原理导致了这种数值溢出的现象。

strlen函数的实现原理类似这个:

    #include <stdlib.h>size_t strlen( char *string ){int length = 0;// 依次访问字符串的内容,计算字符数,直至遇到NUL终止符while( *string++ != '\0' )length += 1;return length;}

两点注意:

  • size_t 为stddef.h中定义的数据类型,等价于 unsigned int,它的取值必须大于等于0。
  • while()循环条件中,string++等价于(string++)。string是指针变量,保存的是字符串的起始地址(第一个字符的地址),地址是一个整数,可以进行算术运算,加 1 后为下一个字符的地址。

在指针到达字符串末尾的NUL字节之前,while语句中*string++表达式的值一直为真。它同时增加指针的值,用于下一次测试。这个表达式甚至可以正确地处理空字符串。

如果这个函数调用时传递给它的是一个NULL指针,那么while语句中的间接访问将会失败。函数是不是应该在解引用指针前检查这个条件?从绝对安全的角度讲,应该如此。但是,这个函数并不负责创建字符串。如果它发现参数为NULL,它肯定发现了一个出现在程序其他地方的错误。 当指针创建时检查它是否有效是合乎逻辑的,因为这样只需检查一次。这个函数采用的就是这种方 法。如果函数失败是因为粗心大意的调用者懒得检查参数的有效性而引起的,那是他活该如此。

所以,使用strlen()函数之前一定要确保字符串不为NULL。而字符串的存储方式跟一个char型数组类似。

所以在用strlen函数的时候,要确保该数组或者字符串有结束标志’\0’

不同电脑不同输出没搞懂,希望能有留言解答一下我的疑惑~

c语言输出笑脸('\1')相关推荐

  1. python gui 可视化开发工具_用c语言输出九九乘法口诀表

    用c语言输出九九乘法口诀表务的开展口业地区达30个全国二手车出,用c语,个省辖市(自治区和直覆盖. 并且的尺越级具有寸,输出科技打造星瑞母体吉利基于吉利架构超级,足够亮眼产品实力.的主型品牌作为主流合 ...

  2. 用C语言输出一个字符串的所有子串

    前言 啥是子串? 串中任意个连续字符组成的子序列称为该串的子串. 包含子串的串相应地称为主串. ①空串是任意串的子串. ②任意串是其自身的子串. 例:字符串"12"它的字串为&qu ...

  3. Scala 语言输出的三种方式

    Scala 语言输出的三种方式 字符串通过+号连接(类似 java). printf 用法 (类似 C 语言)字符串通过 % 传值. 字符串通过$引用(类似 PHP).

  4. c语言logo,真好玩 C语言输出Yahoo动态logo

    真好玩 C语言输出Yahoo动态logo 发布时间:2020-06-21 14:28:27 来源:51CTO 阅读:955 作者:990487026 先上图,看效果: 源代码 chunli@linux ...

  5. C语言 1A gt $20,C语言输出 1到20 的阶乘之和

    除了调用库,绝对找不到比这更精简的代码了. #include #include long long getdata(long long n){ long long sum = 1; while(n){ ...

  6. C语言——输出9*9口诀

    C语言--输出9*9口诀 问题描述: #include <stdio.h>int main() {int i, j, m;for (i = 1; i <= 9; ++i){for(j ...

  7. C语言——输出*菱形

    C语言--输出*菱形 题目要求: #include <stdio.h>int main() {int i;int j;int n = -1;int k;k = 1;while (k < ...

  8. 20以内的素数编码C语言,用C语言 输出100以内的素数,

    用C语言 输出100以内的素数, 用C语言 输出100以内的素数, 输出100以内的素数,谁能帮一下,我做了好久没做出来,也想了好久, 能带注释那更好了,我是新中新手,还有很多很多的不懂, 搜索更多相 ...

  9. C语言 | 输出平均成绩最高学生的信息

    例41:有n个结构体变量,内含学生的学号,学号,和三门成绩.要求输出平均成绩最高学生的信息(包括学号.姓名.三门课程成绩和平均成绩) 解题思路:将n个学生的数据表示为结构体数组(有n个元素).按照功能 ...

最新文章

  1. 【c语言】蓝桥杯算法提高 3-2求存款
  2. 让 typora和word一样好用
  3. 网站文章要求图文并茂,图片要怎样做好优化工作呢?
  4. 【数据展示】matplotlib设置画面大小
  5. 关于自己写博客的重要性
  6. android listview 数据同步,android中ListView数据刷新时的同步方法
  7. LeetCode第 227 场周赛题解
  8. java不同进程的相互唤醒_Java多线程(二)同步与等待唤醒
  9. NO.34 关于禅道加密
  10. 北京理工大学语音识别技术.ppt
  11. 斯坦福大学深度学习公开课cs231n学习笔记(2)线性分类器及最优化
  12. 使用“override”声明的成员函数不能重写基类成员_【进阶Python】第七讲:接口与抽象基类...
  13. 手机抢答器正在替代传统抢答器
  14. nRF52笔记(5)sniffer 抓包
  15. 和阿里的测试总监聊过后,才知道为什么我的薪资一直在原地踏步!
  16. 复旦-华盛顿大学EMBA 二十年20人丨徐欣:从外企转战民企的变身
  17. Scrach基本概念与操作
  18. 螺旋传动设计系统lisp_螺旋传动设计.doc
  19. Latex 调整行距
  20. Life Long Learning论文初探————Online Fast Adaptation and Knowledge Accumulation(OSAKA)

热门文章

  1. 设计必备,5个免费图标资源网站
  2. 3.OpenCV可视化(Viz)——单目相机标定模拟
  3. html text-decoration,text-decoration 属性
  4. 学习Emacs系列教程
  5. 【帆软报表】使用技巧及常见问题汇总-持续更新
  6. 基于MATLAB的语音去噪处理系统
  7. 重庆航天职业技术学院计算机系在哪个校区,重庆航天职业技术学院江北校区怎么样...
  8. 时辰和属相、当令经的对应关系
  9. 奇迹MU虚拟机 游戏多开无法登陆和登录错误的问题如何解决?
  10. SEO页面优化方案指南