首页 > 解决方案 > 如何返回一个字符数组?

问题描述

如果我的功能是void. 但是我必须返回值并且有问题。

#include <iostream>
#include <cstring>

using namespace std;

char* fun(char arr[][100]);

int main() {
    char arr[5][100] = { "Saturn", "Venus","Mars", "Earth", "Neptun" };
    char *inscription = fun(arr);
    std::cout << inscription;
}

char* fun(char arr[][100]) {
    char longer[100];
    strcpy_s(longer, arr[0]);
    for (int i = 0; i < 5; ++i) {
        if (strlen(arr[i]) > strlen(longer))
            strcpy_s(longer, arr[i]);
    }
    return longer;
}

我会很感激你的回答。

标签: c++arrayschar

解决方案


如果你想从一个函数返回一个字符数组,我看到两个选项:

  • a) 创建一个堆分配的字符数组并返回一个指向它的指针
  • b) 给函数一个要填充的字符数组

一个)

char* fun(char arr[][100]) {
    char* longer = new char[100];
    // ... do something
    return longer
}

b)

int main()
{
    //...
    char longer[100];
    fun(arr, longer);
    //...
}

void fun(char arr[][100], char* longer) {
    // ... fill longer
}

我认为最好的方法是第二种方法,因为您没有在堆上分配任何东西,并且可以避免处理不必要的问题。您应该尽可能避免堆分配,因为如果调用者不释放内存并花时间去做,它们可能会导致问题。


推荐阅读