我是一名程序员,刚刚开始使用c ++。在c中如果我们从函数返回地址,我们传递的地址将无效,直到除非我们动态分配该内存。 但是在C ++中,我确实没有分配内存来存储字符串。 是字符串的地址" a"即使从函数copy_string返回后也会有效。 为什么在main函数中返回正确的字符串?
#include <iostream>
#include <string>
using namespace std;
class String_copy{
public:
string str1;
string str2;
string copy_string(string str);
};
string String_copy::copy_string(string str)
{
string a;
string b;
b="Hello World!";
a = str+" "+b;
return a;
}
int main(void)
{
String_copy str;
str.str1="Wooo";
str.str2 = str.copy_string(str.str1);
cout << "Final string is \"" << str.str2 << "\"" << endl;
return 0;
}
答案 0 :(得分:0)
在C和C ++中,与C#和Java相反,变量不需要在动态内存中分配,动态内存包括字符串和字符数组。
如果需要或想要从函数返回指针,它们必须指向一个在执行离开函数后不会消失的变量。两种流行的技术是使用从动态内存分配的static
变量或变量。执行离开函数后,static
和动态分配的变量都将存在。
您可能会将std::string
与C样式字符数组混淆。 std::string
类是一个对象,可以从整数或双精度函数返回。
从技术上讲,可以在不使用指针的情况下从函数返回C样式字符串。就像返回一个整数数组一样。
C中的常见做法是返回指向数组的指针,以避免复制大型数据结构。所以惯例是返回一个指向C-Style字符串的指针,目标必须是static
或动态分配,所以指针的目标在执行离开函数后不会消失。