c++ - 如何返回一个字符数组?
问题描述
如果我的功能是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;
}
我会很感激你的回答。
解决方案
如果你想从一个函数返回一个字符数组,我看到两个选项:
- 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
}
我认为最好的方法是第二种方法,因为您没有在堆上分配任何东西,并且可以避免处理不必要的问题。您应该尽可能避免堆分配,因为如果调用者不释放内存并花时间去做,它们可能会导致问题。
推荐阅读
- javascript - 如何使用悬停动画关闭下拉菜单
- codeigniter - 我在分页时遇到问题第一页工作正常,但第二页不是
- here-api - 令牌服务器的矩阵计算未经授权
- c++ - 在 AppContainer 中运行 MinGW g++ 编译程序并抛出 ERROR_ILLEGAL_DLL_RELOCATION
- list - Python 列表理解 - 替换字符串中的多个字母
- assembly - 错误消息“前向消息需要覆盖”警告“模块依赖于传递 - 兼容性传递已完成”
- ios - 仅当条件为真时来自 TableView 的 UIStoryboardSegue
- reactjs - reactjs:检测我在开发或测试环境中
- cordova - 为什么会收到此错误“模块 * 已定义”?
- python - 如何防止使用现有用户名注册?