我是靠谱客的博主 背后银耳汤,最近开发中收集的这篇文章主要介绍string类型的局部变量不能通过变量名作为函数返回值返回,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include<iostream>
using namespace std;

/* 写一个函数,对于字符串类型数据取其长度的一半
 *             对于浮点数类型数据取其值的二分之一
 */

float half(float a)
{
	return a / 2;
}

/*
string half(string s)
{
	int n = s.length() / 2;
	string str;
	for (int i = 0; i < n; i++)
	{
		str[i] = s[i];
	}
	return str;//返回str,相当于返回一个指针。str指向string类型的变量。
}
*/
// string类型的局部变量不能通过变量名作为函数返回值返回
// 因为局部变量是存放在栈区,栈区的数据在函数执行后会自动释放。从而string类型的局部变量也就会被释放。
// str虽然作为指针被返回了,但是它所指向的区域中的内容也已经被释放了。

// 解决方法是:通过new开辟空间,将指针所指向的数据放到堆区
string half(string s)
{
	int n = s.length() / 2;
	char* str = new char[n+1];
	for (int i= 0; i < n; i++)
	{
		str[i] = s[i];
	}
	str[n] = '';
	return str;
}

int main(void)
{
	float n;
	string str;

	cin >> n >> str;

	cout << half(n) << endl;
	cout << half(str) << endl;
	//输出出现乱码就是因为字符串结尾并没有结尾符''。

	system("pause");
	return 0;
}

最后

以上就是背后银耳汤为你收集整理的string类型的局部变量不能通过变量名作为函数返回值返回的全部内容,希望文章能够帮你解决string类型的局部变量不能通过变量名作为函数返回值返回所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部