c语言的烫烫烫烫烫??

简介: 当初学习C语言时,对于一些特殊的打印输出可能会感到困惑,比如会出现一堆乱码烫烫烫的情况。这样做的好处是这些值都很大,作为指针是不可能的(而且 32 位系统中指针很少是奇数值,在有些系统中奇数的指针会产生运行时错误),作为数值也很少遇到,而且这些值也很容易辨认,因此这很有利于在 Debug 版中发现 Release 版才会遇到的错误。但是学的比较深的同学就会里面反应过来这个代码其实是有问题的,因为在字符数组里面,最后一位没有存储''\0'',所以在打印的时候不会遇见特殊结束标识符,不会停止打印;


当初学习C语言时,对于一些特殊的打印输出可能会感到困惑,比如会出现一堆乱码烫烫烫的情况。其实这是因为在C语言中,对于字符类型和数字类型之间的隐式转换可能会导致打印输出的结果不符合预期。这并不意味着程序员"烫",而是因为数据类型转换导致的打印错误。在编程过程中,对于数据类型的处理需谨慎,避免出现这种问题。希望这能帮助解答你的疑惑。

就比如这个代码

include

int main()
{
char ch[] = { 'a','b','c' };
printf("%s", ch);
return 0;
}

很简单的一个代码,如果刚开始学,我们可能会觉得会打印abc;

但是学的比较深的同学就会里面反应过来这个代码其实是有问题的,因为在字符数组里面,最后一位没有存储''\0'',所以在打印的时候不会遇见特殊结束标识符,不会停止打印;

那么当我们运行代码,看看打印效果

image.png

果真会出现了烫烫烫烫烫。

对应打印其实是打印内存存储的数据,那么我们对应的就需要查找内存出书信息,
image.png

还有一点如果运行多次会发现每一次的打印都是不一样的。这个问题是跟结束条件’‘\0''有关;

首先我们先解决为什么每次打印我们看到结果不一样问题:正如上图所示我们看到后面恰好有初始化为0的地方,所以打印到对应的哪里,然而每次初始化又有可能不同,自然就会结束 所以每次打印结果可能不同;

那么我们再来解决为什么打印烫烫烫烫烫,在Visual Studio中,未初始化的栈空间用0xCC填充,而未初始化的堆空间用0xCD填充。因为abc是存储在栈中,所以后面的内存中,内存会初始化为cc。而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。如果一个字符串没有结束符’\0’,输出时就会打印出未初始化的栈或堆空间的内容
这样设计的目的:
这样做的好处是这些值都很大,作为指针是不可能的(而且 32 位系统中指针很少是奇数值,在有些系统中奇数的指针会产生运行时错误),作为数值也很少遇到,而且这些值也很容易辨认,因此这很有利于在 Debug 版中发现 Release 版才会遇到的错误
对于本代码如何修改避免:直接添加结束表示符
image.png

其实有一些文档打开是乱码跟这个道理差不多,只是没有用二进制读取方式打开;并不是文件本身有问题~~~

目录
相关文章
|
算法 安全 C语言
使用C语言实现DES算法代码
使用C语言实现DES算法代码
731 0
|
12月前
|
存储 弹性计算 大数据
阿里云服务器38元、99元、199元特惠详细配置、适用场景及购买条件介绍
阿里云特惠云服务器全解析:入门款:轻量应用服务器(2核2G200M带宽+40G ESSD盘)38元/年,日均0.1元。进阶款:经济型e实例(2核2G3M带宽+40G ESSD Entry盘)99元/年,续费同价。性能款:通用算力型u1实例(2核4G5M带宽+80G ESSD Entry盘)199元/年,企业独享,续费同价。三款配置覆盖个人建站、中小企业应用及轻量级企业服务,通过大数据精选用户常用配置,实现价格与性能的精准匹配。本文将详细解析这些阿里云服务器的配置、价格、限购条件以及购买指南,帮助大家更好地了解和选择适合自己的云服务器。
|
编译器
区分LR(0),SLR(1),LR(1)和LALR(1)
区分LR(0),SLR(1),LR(1)和LALR(1)
2806 1
|
前端开发
别再去记什么“子绝父相”了
子绝父相只是因为经常会这么用所以才有人把它总结为这几个字的,但并不是只能这样用,就算是:子绝父绝,子绝父固定都是可以的,absolute 的 left、right、top、bottom 这几个定位的属性参照对象是最邻近的定位祖先元素,所以只要我们要相对与哪个祖先来定位只要将祖先设置为定位元素就行,至于是哪种就得看你的实际需求了,当希望子元素相对于父元素进行定位,又不希望父元素脱标的时候,我们才会会用到子绝父相。
949 1
别再去记什么“子绝父相”了
|
机器学习/深度学习 存储 并行计算
CPU 和 GPU到底有啥区别?
【5月更文挑战第10天】
4209 2
CPU 和 GPU到底有啥区别?
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
4290 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
JavaScript 前端开发 安全
JS 混淆解析:JS 压缩混淆原理、OB 混淆特性、OB 混淆JS、混淆突破实战
JS 混淆解析:JS 压缩混淆原理、OB 混淆特性、OB 混淆JS、混淆突破实战
2058 2
|
Shell Windows
电脑文件打开缓慢、右键卡顿解决方案
本文汇总了几种解决电脑文件打开缓慢和右键点击文件夹卡顿问题的方案,包括重启资源管理器、修改注册表中的Shell Extensions、以及设置在单独的进程中打开文件夹窗口。
|
前端开发 计算机视觉
用 css 画一个太极图,才几行代码就开始喊难了?
据说太极图里面的文化博大精深,有着一生二,二生三,三生万物的道理,虽然我不怎么懂,要让它转起来就会发现非常神奇,那今天我们就来用 css 画一个太极图吧。
739 0
用 css 画一个太极图,才几行代码就开始喊难了?