Java教程

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

本文主要是介绍返回局部变量是一个指向常量的字符串指针,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

返回局部变量地址

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可以正确打印

这篇关于返回局部变量是一个指向常量的字符串指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!