系统相关
首页 > 系统相关> > 内存四区——栈区分析

内存四区——栈区分析

作者:互联网

测试源码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *get_str()
{
	char str[] = "AABBCCDDEEFF"; //栈区,
	printf("str = %s\n", str);

	return str;
}


int main(void)
{
	char buf[128] = { 0 };

	//strcpy(buf, get_str());
	//printf("buf = %s\n", buf); 

	char *p = NULL;
	p = get_str();
	printf("buf = %s\n", buf);//乱码,不确定



	printf("\n");
	system("pause");
	return 0;
}

测试分析:

 

strcpy函数在C编译器中将其栈空间的内容赋给该数组后才释放,但是指针的话,直接释放,会打印乱码 。方然VS编译器可能做了优化,多次测试,打印的结果为空串。

测试结果:

我把上面的顺序颠倒了一下,否则测试会发现一样,原因在于第一步的strcpy已经将buf中的内容填充了,可以分开进行测试,即可得到正确的测试结果。

 

 

标签:栈区,测试,get,四区,char,内存,str,printf,buf
来源: https://blog.csdn.net/zxy131072/article/details/88363795