返回C+中的字符串数组+;功能 我是C++新手。 对于一个学校项目,我需要制作一个能够返回字符串数组的函数

返回C+中的字符串数组+;功能 我是C++新手。 对于一个学校项目,我需要制作一个能够返回字符串数组的函数,c++,arrays,string,function,C++,Arrays,String,Function,目前,我的标题中有以下内容: Config.h string[] getVehicles(void); Config.cpp string[] Config::getVehicles(){ string test[5]; test[0] = "test0"; test[1] = "test1"; test[2] = "test2"; test[3] = "test3"; test[4] = "test4"; return test;} 显然这不起作用,但这正是我想做的。 在Java中,这就

目前,我的标题中有以下内容:

Config.h

string[] getVehicles(void);
Config.cpp

string[] Config::getVehicles(){
string test[5];
test[0] = "test0";
test[1] = "test1";
test[2] = "test2";
test[3] = "test3";
test[4] = "test4";

return test;}
显然这不起作用,但这正是我想做的。
在Java中,这就是实现这一点的方法。我尝试过Google的问题,但我没有遇到任何明显的答案。在C++中,你不使用数组,而是<代码> STD::vector < /Calp>实例。C++中的数组必须有固定的编译长度,而<>代码> STD::vector < /Cord>实例可以在运行时更改它们的长度。
std::vector<std::string> Config::getVehicles()
{
    std::vector<std::string> test(5);
    test[0] = "test0";
    test[1] = "test1";
    test[2] = "test2";
    test[3] = "test3";
    test[4] = "test4";
    return test;
}
<> >动态分配一个数组:<>代码:STD::String >技术上是可行的,但是C++中的一个可怕的想法(例如C++不提供java的垃圾收集器)。
<如果你想用C++编程,然后先读Cover to Cover商店……在C++中编写java代码是一种灾难的处方,因为语言尽管表面上的支撑相似,但是在很多基本的方面都非常不同。

在这种情况下,最好使用向量,但这不是正确的答案。它不起作用的原因是变量测试只存在于函数的范围内。 因此,您必须自己管理内存。以下是一个例子:

string* getNames() {
 string* names = new string[3];
 names[0] = "Simon";
 names[1] = "Peter";
 names[2] = "Dave"; 

 return names;
}
在本例中,返回堆中位置的指针。堆中的所有内存都必须手动释放。因此,如果您不再需要内存,您现在的工作就是删除内存:

delete[] names;
试试这个

#include <iostream>
#include <string>

using namespace std;

string * essai()
    {
    string * test = new string[6];
    test[0] = "test0";
    test[1] = "test1";
    test[2] = "test2";
    test[3] = "test3";
    test[4] = "test4";
    cout<<"test et *test\t"<<&test<<' '<<*(&test)<<'\n';
    return test;
    }

main()
    {
    string * toto;
    cout<<"toto et *toto\t"<<&toto<<' '<<*(&toto)<<'\n';
    toto = essai();
    cout<<"**toto\t"<<*(*(&toto))<<'\n';
    cout<<"toto\t"<<&toto<<' '<<*(&toto)<<'\n';
    for(int i=0; i<6 ; i++)
        {
        cout<<toto[i]<<' '<<&toto[i]<<'\n';
        }
    }

获取地址和地址的内容可以帮助您理解C++中的数组是基本的:它不提供任何方法,并且可以访问索引而不分配内存(循环中的值6)。


您的第一个示例显示了本地数组的直接分配(test),因此您无法返回它(本地数组死亡),在本示例中,本地变量也死亡,但始终有一个变量可以访问分配内存的这一部分、函数,然后是接收函数结果的变量,因此,变量测试在调用函数后失效,但内存仍然被分配。问候。

当您在时,也可以查看向量。更容易使用。因为现在getVehicles的调用者不知道数组的长度。使用std::vector——这是我今天第一次键入它。确实需要有一组带有标准简单答案的网页。使用std::vector,不返回本地地址等。现在,如何查找返回数组的长度?谢谢,这解决了我的问题!,我花了几个小时试图解决这个问题,我的问题是我声明字符串*名称是静态的,而不是动态的。如果问题是关于如何实现Java所能实现的相同功能,那么这也不能回答问题。此代码不提供java垃圾回收,字符串不是Unicode等。返回一个动态分配的字符串数组在C++中是不正确的(除非你有一个经过验证的特定情况)。如果您想要Java,请使用Java。。。如果你想用C++来使用C++。在C++中编写java代码是一个非常可疑的问题(如果不是简单的愚蠢的)。@ C++和C中的第四个例子,通常将返回数组的长度作为单独的数字返回(A<代码> SsieZiT<<代码>,因为这里是标准的无符号整数类型)。因此,您可以在参数(
size\u t&length
)中使用一个引用
size\u t
),因为返回值已经是数组。使用
std::vector
-您将非常高兴分配完内存后别忘了释放内存!每一行“新建”都应该有一行“删除”来匹配。
#include <iostream>
#include <string>

using namespace std;

string * essai()
    {
    string * test = new string[6];
    test[0] = "test0";
    test[1] = "test1";
    test[2] = "test2";
    test[3] = "test3";
    test[4] = "test4";
    cout<<"test et *test\t"<<&test<<' '<<*(&test)<<'\n';
    return test;
    }

main()
    {
    string * toto;
    cout<<"toto et *toto\t"<<&toto<<' '<<*(&toto)<<'\n';
    toto = essai();
    cout<<"**toto\t"<<*(*(&toto))<<'\n';
    cout<<"toto\t"<<&toto<<' '<<*(&toto)<<'\n';
    for(int i=0; i<6 ; i++)
        {
        cout<<toto[i]<<' '<<&toto[i]<<'\n';
        }
    }
toto et *toto   0x7ffe3a3a31b0 0x55dec837ae20
test et *test   0x7ffe3a3a3178 0x55dec9ddd038
**toto  test0
toto    0x7ffe3a3a31b0 0x55dec9ddd038
test0 0x55dec9ddd038
test1 0x55dec9ddd058
test2 0x55dec9ddd078
test3 0x55dec9ddd098
test4 0x55dec9ddd0b8
 0x55dec9ddd0d8