内存四区——栈区分析
作者:互联网
测试源码:
#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