测试源码:
#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中的内容填充了,可以分开进行测试,即可得到正确的测试结果。