返回局部变量是一个指向常量的字符串指针


返回局部变量地址

char* GetMemory(void)
{

	char p[] = "hello world";
	return p;
}

int main()
{
	char* str = NULL;
	str = GetMemory();
	printf(str);
	return 0;
}

GetMemory函数首先将”hello world”字符串(一般在.rdata区段存放)复制到栈上,然后返回对应的栈地址。当GetMemory返回后栈内存依旧可以正确访问,但是当调用printf函数时其会使用GetMemory使用过的栈,所以对应栈中的内存就会被覆盖,printf无法打印出hello world。

返回局部变量是一个指向常量的字符串指针

返回局部变量的值

const char* GetMemory(void)
{

	const char* p = "hello world";
	return p;
}

int main()
{
	const char* str = NULL;
	str = GetMemory();
	printf(str);
	return 0;
}

GetMemory返回的是.rdata区段中的常量字符串”hello world”的地址,所以printf可以正确打印

返回局部变量是一个指向常量的字符串指针

原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/270271.html

(0)
上一篇 2022年6月24日
下一篇 2022年6月24日

相关推荐

发表回复

登录后才能评论