c语言中为什么出现“烫”字?

Python036

c语言中为什么出现“烫”字?,第1张

出现“烫”的原因是由于字符数组中的某些数组元素没赋值。\x0d\x0a\x0d\x0a具体原因可以通过如下实例来进行说明:\x0d\x0achar a[10]\x0d\x0aa[0] = 'a'\x0d\x0aa[1] = 'b'\x0d\x0aa[2] = 'c'\x0d\x0aa[3] = 'd'\x0d\x0aprintf("%s", a) // 输出结果就会出现很多“烫”,因为只对数组a中前四个元素进行了赋值,后面的元素未进行赋值,所以计算机默认就输出“烫”\x0d\x0a\x0d\x0a如果作如下修改就会正常输出\x0d\x0a\x0d\x0achar a[10]\x0d\x0aa[0] = 'a'\x0d\x0aa[1] = 'b'\x0d\x0aa[2] = 'c'\x0d\x0aa[3] = 'd'\x0d\x0aa[4] = '\0'\x0d\x0aprintf("%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) 通过函数指针调用函数时,会通过检查栈指针验证函数调用的匹配性(防止原形不匹配)。

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

出现烫,表示的是数组没有进行初始化或赋值,

那个……取值运算符和++是同一优先级的……会从左往右走……比如:*p++等于(*p)++

于是乎,你的赋值语句全部没用,相当于整个数组几乎只是最后一个*p

=

'\0'有用,*p等于str3,不影响参数,于是,没有经过初始化和赋值的字符串,显示为全是烫