视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
C语言打印出‘烫’‘屯’是怎么回事?
2024-11-30 12:51:09 责编:小OO
文档

C语言中未初始化的堆或栈变量在打印时会显示特定的字符。比如,在一个简单的程序中,可以观察到这一现象。程序如下:

#include

void main() {
char s[10];
//栈
printf("%s\n", s);
char ch = 'a';
char* p = (char*)malloc(sizeof(char) * 10);
//堆
printf("%s\n", p);
}

s是一个数组,属于栈内存。未初始化的栈内存打印出的是“烫”,并且内存值是0xCC,0xCD。而p是一个动态分配的内存,属于堆,未初始化的堆内存打印出的是“屯”,并且内存值是0xCD,0xCC。

当程序运行时,未初始化的栈内存s会显示出“烫”,这是因为未初始化的栈内存通常会被填充为0xCC,而在打印时会转换成字符“烫”。同样地,未初始化的堆内存p显示出“屯”,因为未使用的堆内存通常被填充为0xCD,在打印时会转换成字符“屯”。这些值是编译器和系统默认的内存填充值,用来帮助调试和确保内存安全。

通过观察这些打印输出,程序员可以了解内存的状态,从而更好地进行调试和错误排查。此外,这些默认值还帮助开发者避免使用未初始化的内存,因为直接使用这些内存会导致不可预测的行为。

值得注意的是,虽然这些默认值有助于调试,但它们并不保证始终如一。不同的编译器和系统可能会使用不同的默认值。因此,在正式发布代码之前,建议对所有未初始化的内存进行适当的初始化,以确保程序的稳定性和可预测性。

综上所述,未初始化的栈内存s和堆内存p在打印时显示出的“烫”和“屯”是由于内存填充值0xCC和0xCD在打印时的字符表示。这为程序员提供了有用的调试信息,但也提醒我们在编写代码时要确保所有内存都被正确初始化。

下载本文
显示全文
专题