gpt4 book ai didi

c++ - 从 C++ 中的函数返回 2D 字符数组并打印它

转载 作者:行者123 更新时间:2023-12-02 09:53:17 24 4
gpt4 key购买 nike

这是我的代码,我想从我的函数中返回二维数组 [10][8] 和 [10][20],但我得到一个错误! (分段故障)。
请帮我 !!我的项目需要这个。最后我想打印这个数组,但由于错误我不能这样做。
有人可以帮我解决这个问题并打印出来吗?

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstring>

using namespace std;

char **getWords(int level)
{
if (level == 1)
{
char **words = new char *[8];
strcpy(words[0], "Pakistan");
strcpy(words[1], "Portugal");
strcpy(words[2], "Tanzania");
strcpy(words[3], "Thailand");
strcpy(words[4], "Zimbabwe");
strcpy(words[5], "Cameroon");
strcpy(words[6], "Colombia");
strcpy(words[7], "Ethiopia");
strcpy(words[8], "Honduras");
strcpy(words[9], "Maldives");
return words;
}
//For Hard Level
else if (level == 2)
{
char **words = (char **)malloc(sizeof(char *) * 20);
strcpy(words[0], "Tajikistan");
strcpy(words[1], "Uzbekistan");
strcpy(words[2], "Azerbaijan");
strcpy(words[3], "Bangladesh");
strcpy(words[4], "Luxembourg");
strcpy(words[5], "Madagascar");
strcpy(words[6], "Mauritania");
strcpy(words[7], "Montenegro");
strcpy(words[8], "Mozambique");
strcpy(words[9], "New Zealand");

return words;
}
}

int main()
{
getWords(1);

return 0;
}

最佳答案

通过做

char **words = new char *[10];
您只是为指针分配内存,而不是为要存储实际字符串的内存块分配内存,您也需要为此分配内存:
char **words = new char *[10]; //space for 10 pointers

for(int i = 0; i < 10; i++){
words[i] = new char[10]; // space for 10 characters each line, 8 is not enough
} // you need at least 9 because of the ending nul byte

strcpy(words[0], "Pakistan");
strcpy(words[1], "Portugal");
//...
在 main 中,将它们分配给指向指针的指针并打印它们,就好像它是一个字符串数组:
char** words = getWords(1);

for(int i = 0; i < 10; i++){
std::cout << words[i] << std::endl;
}
Live demo
使用 malloc 的第二部分也是如此。 .
char **words = (char**)malloc(sizeof *words * 10); //space for 10 pointers

for(int i = 0; i < 10; i++){
words[i] = (char*) malloc(20); //space for 20 characters each line
}
Live demo
在正常情况下,当程序没有立即结束时,您必须释放内存:
对于使用 new 分配的内存:
for (int i = 0; i < 10; i++) 
{
delete words[i];
}
delete words;
对于使用 malloc 分配的内存:
for(int i = 0; i < 10; i++)
{
free(words[i]);
}
free(words);
在您的情况下这可能会很棘手,因为您返回 2 种类型的内存分配取决于您作为参数传递的选项,我的建议是您使用相同的选项来选择如何释放内存。
P.S.:使用 C++ 容器,如 std::vectorstd::string会让你的工作更轻松,你不需要自己处理内存。

关于c++ - 从 C++ 中的函数返回 2D 字符数组并打印它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62524359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com