C语言 字符串的输出,为什么输出那么多‘烫’呢?

C语言 字符串的输出,为什么输出那么多‘烫’呢?,第1张

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

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

扩展资料

(1) 初始化内存和变量

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

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

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

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

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

计算机显示不出来的字符用C语言打印出来就是“烫”。

原因呢,是因为你没有给变量c赋值。

你应该忘记了这一句:

c = array[i]//在i++之前

或者可以直接:

while((c=array[i])!='\0')

另:c库函数中有大小写转换的函数

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

cout<<a<<endl

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

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


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

原文地址: https://outofmemory.cn/yw/11761385.html

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

发表评论

登录后才能评论

评论列表(0条)

保存