c语言中为什么出现现烫

c语言中为什么出现现烫,第1张

出现“烫”的原因是由于字符数组中的某些数组元素没赋值。

具体原因可以通过如下实例来进行说明:

char a[10]

a[0] = 'a'

a[1] = 'b'

a[2] = 'c'

a[3] = 'd'

printf("%s", a) // 输出结果就会出现很多“烫”,因为只对数组a中前四个元素进行了赋值,后面的元素未进行赋值,所以计算机闭脊默认就输出“烫”

如果作如下修改就会正常输出

char a[10]

a[0] = 'a'

a[1] = 'b'

a[2] = 'c'

a[3] = 'd'

a[4] = '\0'

printf("%s", a) // 输出abcd,因为加了结束字符'\0',而轿哪渗C语言中输出字符串是以结束字缓或符'\0'作为结束输出的,所以只输出'\0'前面的所以字符,即abcd

输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC。而定义的字符数组空间不够,所以就占用了那部分不属于自己的空间,因为cout输出char*是要遇到空清链字符才停止的,所以便把那些肆陵垃圾都打出来了。

即是说在最后没有字符串结束标志'\0'。

扩展资料

(1) 初始化内存和变量

包括用 0xCC 初始化所有自动变量,0xCD ( Cleared Data ) 初始化堆中分配的内存(即动态分配的内存 ),0xDD ( Dead Data ) 填充已被释放的堆内存(例如 delete ),0xFD( deFencde Data ) 初始化受保护的内存。

这样做的好处是这些值都很大,作为指针是不可能的(而且 32 位系统中指针很少是奇数值,在有些系统中奇数的指针会产生运行时错误),作为数值也很少遇到,而且这些值也很容易辨认,因此这很有利于在 Debug 版中发现 Release 版才会遇到的错误。

要特别注意的是,很多人认为编译器会用 0 来初始化变量,这是错误的(而且这样很不利于查找错误)。

(2) 通过函数指针调用函数时,会通过检查栈指针验证函数调裂正戚用的匹配性(防止原形不匹配)。

参考资料来源:百度百科-字符串

出现“烫”的原因是由于字符数组char[50]没赋值。

cout<<a<<endl

数组没能正确初始化内容(应该是读取的时候没能有正确的'\0'搭察键结束符没则),是VC堆栈的默认值 0xcc。

"烫"用UE二进制方式查看就是 cc cc,即VC对栈默认知巧值。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12398936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存