首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回C++函数中的字符串数组

返回C++函数中的字符串数组
EN

Stack Overflow用户
提问于 2011-09-23 10:08:29
回答 2查看 81.6K关注 0票数 25

我是C++的新手。对于一个学校项目,我需要做一个函数,它将能够返回一个字符串数组。

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

Config.h

代码语言:javascript
复制
string[] getVehicles(void);

Config.cpp

代码语言:javascript
复制
string[] Config::getVehicles(){
string test[5];
test[0] = "test0";
test[1] = "test1";
test[2] = "test2";
test[3] = "test3";
test[4] = "test4";

return test;}

显然,这是行不通的,但这就是我想要做的事情。在Java中,这将是实现它的方法。我试过搜索我的问题,但我没有发现任何答案,显然是诚实的。

EN

回答 2

Stack Overflow用户

发布于 2011-09-23 10:11:32

在C++中,您不使用数组,而是使用std::vector实例。C++中的数组必须有一个编译时固定的长度,而std::vector实例可以在运行时更改它们的长度。

代码语言:javascript
复制
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::vector也可以动态增长,所以在C++程序中,您会发现更多类似于

代码语言:javascript
复制
std::vector<std::string> Config::getVehicles()
{
    std::vector<std::string> test; // Empty on creation
    test.push_back("test0"); // Adds an element
    test.push_back("test1");
    test.push_back("test2");
    test.push_back("test3");
    test.push_back("test4");
    return test;
}

动态分配std::string数组在技术上是可能的,但在C++中却是一个糟糕的想法(例如,C++没有提供Java所拥有的垃圾收集器)。

如果你想在C++中编程,那么grab a good C++ book和阅读它的封面,以涵盖第一.用C++编写Java代码是一种灾难,因为这些语言尽管表面上有大括号的相似之处,但在许多基本方面都有很大的不同。

票数 19
EN

Stack Overflow用户

发布于 2018-04-27 14:14:35

尝尝这个

代码语言:javascript
复制
#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';
        }
    }

例如,在我的计算机中,结果是

代码语言:javascript
复制
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

获取地址和地址内容可以帮助您理解c++中的数组实际上是基本的:它不提供任何方法,您可以访问索引而不分配内存(循环中的值6)。第一个示例显示本地数组( test )的直接分配,因此不能返回它(本地数组死掉),在本例中,局部变量也会死,但是始终有一个变量访问分配内存的这一部分,函数,然后是接收函数结果的变量,因此变量测试在调用函数之后就死了,但是内存仍然被分配。致以问候。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7527356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档