printf 中的 %c 输出的伪灵异事件

问题描述:

定位到下面代码,unsigned char数组 fqdn 存放一些字符串。如果按照下面代码编译,则可以正常工作,但如果将 problem line 中的 %d 改为 %c,则仿佛芯片被复位了一样,有点像看门狗复位,而且曾经打印过的东西,似乎消失了。

想不通的地方:

  • 1.为何偏偏将 %d 改为 %c 就出现此现象,改为%u 则不会?
  • 2.为何上面 %c 输出没有问题。
  • 3.线程栈足够大,看门狗也被禁止。
  • 4.是不是printf中会产生某个内核中断?
static uint8_t fqdn[MDNS_MAX_NAME_LEN + 1];
//do some thing
定位代码如下:for(int i = 0; i < MDNS_MAX_NAME_LEN; ++i){printf("%c",fqdn[i]);}p = dname_put_label(fqdn, hname);dname_put_label(p, domname);for(int i = 0; i < MDNS_MAX_NAME_LEN; ++i){printf("%d ",fqdn[i]);  // Problem line}

正确定位过程:

  • 1.尝试 printf(“%c “,fqdn[0]); 没有问题
  • 2.依次尝试 %c 输出 fqdn 每个字符。到 第 11 个字符时候出现问题。
  • 3.printf(“%d “,fqdn[11]); 打印出值 是 ASCII 12
  • 4.查阅 ASCII 表,12 -> \f -> 换页
  • 5.WTF

破案:

fqdn数组中 含有I/O端的控制字符,第一次 %c 由于没有修改 fqdn 中字符内容,可以正确输出。
第二次 输出前 fqdn 被函数 dname_put_label 修改了。其中包含换页控制字符。
第二次 如果 %d 输出仅仅是输出 ASCII 值,不会影响。如果 %c 输出控制字符,则换页控制字符,
在输出终端上就会换到下一页,给人直观感觉像是被清屏了,或者像是被复位了一样。

其实这不是个bug,而是对 %c输出控制字符理解不够深刻造成的伪灵异事件。

printf 中的伪灵异事件相关推荐

  1. 又见灵异事件,li中的span右浮动遇到的问题

    最新又见灵异事件,li中的span右浮动遇到的问题 以下是三零网为大家整理的最新又见灵异事件,li中的span右浮动遇到的问题的文章,希望大家能够喜欢! 新闻列表中为了显示时间,加了个span < ...

  2. 提莫隐身+机器人能钩_英雄联盟惊现“灵异事件”,机器还能钩中提莫蘑菇!亚索无辜躺枪...

    原标题:英雄联盟惊现"灵异事件",机器还能钩中提莫蘑菇!亚索无辜躺枪 英雄联盟惊现"灵异事件",机器还能钩中提莫蘑菇!亚索无辜躺枪 相信一些喜欢玩英雄联盟的小伙 ...

  3. 灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样!(一番分析后找到原因!)

    我今天在code的时候发现了一个灵异事件 !同一个代码在code::blocks和Dev上面运行结果不一样! 如图,同一个代码文件在两个编译器上的输出不同: 同样的代码在code::blocks上输出 ...

  4. TextBox灵异事件之背后神秘的深度灵异事件真相揭秘

    最近又忙于秋色园和微博粉丝精灵的开发,本来N天前应该出来的文,迟来了好几天,今天抽空写了写,把事件的真相给大伙说清楚: 上篇:半解TextBox灵异事件背后神秘的深度灵异事件,一文中,一共提出两个问题 ...

  5. 2017年经历的那些灵异事件

    2017年快要过去了,回顾这一年来,在业务代码里,开发新功能占据70%,修复BUG占了30%,在解决的这些BUG中,大部分都是代码级别的错误,使用 Chrome Devtools 基本都可以解决,但其 ...

  6. 重大灵异事件!我的手机大半夜地自己在B站看番剧!!!

    我把灵异过程录下来了,速看! 重大灵异事件!我的手机大半夜地自己在B站看番剧!!! 其实,我利用了appium+python实现手机自动化爬虫B站热门番剧数据功能,具体操作如下: 一.搭建环境 1.搭 ...

  7. 《侠盗飞车手 圣安地列斯》灵异事件

    ROCKSTAR在圣安地列斯中带给我门不只是暴力性×××,还有鬼怪...没碰见过? 这里是一些玩家说的灵异事件,大家有胆量就去求证一下吧... 一.无人驾驶的Glendale 在Chillid山上的树 ...

  8. Reset 数据包导致的灵异事件

    1. Reset 灵异事件案例 1.1. 场景描述 有一天,业务开发和 DBA 运维跑过来,说凌晨调用 Cetus(数据库中间件)的定时脚本出问题了,Cetus 没有响应回来.当听到这个噩耗,我一脸懵 ...

  9. 世界十大无法科学解释灵异事件(进来发表自己看发)

    1.法老咒语(世界最大灵异事件)  2.葡萄牙灵异事件(在网上引起了极大的轰动)  3.伦敦塔闹鬼(超著名)  4.20世纪上海滩灵异事件(孟小冬照片灵异事件)  5.鬼脸(墙壁上出现灵异鬼脸)  6 ...

最新文章

  1. EAR部署websphere步骤
  2. mysql 降序_MySQL 8 新特性之降序索引底层实现
  3. python编辑用户登录界面_python编辑用户登入界面的实现代码
  4. python魔法方法(一)
  5. Netty : netty 4如何解决空轮询bug
  6. LeetCode:螺旋矩阵【54】
  7. LeetCode(929)——独特的电子邮件地址(JavaScript)
  8. 哈佛创业者讲述:比特币与区块链背后的真相 | 硬创公开课
  9. 互联网金融又任性撒钱了
  10. Java算法面试题(005) 求n边形周长的k等分点坐标(今日头条)
  11. BGP边界网关路由协议
  12. Python OpenCV3 计算机视觉秘籍:1~5
  13. 深海迷航创造模式火箭怎么飞_深海迷航火箭怎么起飞
  14. 解决ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
  15. SQLServer实验 视图的使用-view 练习题
  16. Elasticsearch升级1.5版本暴露jdk的bug
  17. yolov5 目标检测算法
  18. explode() 和implode()
  19. 『曲线构建系列 2』多曲线方法 (基差)
  20. 2021年Java大数据难不难学

热门文章

  1. 左边是地狱右边也是地狱_走出教程地狱
  2. Windows内核安全与驱动编程学习笔记----1.WDK安装
  3. 旭日x3派个人配置总结(ubuntu server + xrdp)
  4. 推荐:雨林木风Linux
  5. oracle 18c 转 11g,安装Oracle:Oracle 18c、Oracle 11g
  6. shp文件中polyline是什么_polyline怎么读用法大全_polyline是什么意思
  7. 使用IntelliJ IDEA搭建kafka源码环境时遇到Output path错误解决办法
  8. 基于微信小程序的健康管理系统-计算机毕业设计
  9. NAND FLASH基础知识总结
  10. 优化网站如何看待纯文本外链的作用