首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过值传递字符数组并从函数返回新的字符数组?

通过值传递字符数组并从函数返回新的字符数组?
EN

Stack Overflow用户
提问于 2011-11-27 06:47:55
回答 4查看 1.9K关注 0票数 0

如果我现在完全误解了C++,我道歉,所以我的问题可能很容易解决。我尝试通过值将一个字符数组传递给一个函数,创建一个相同大小的新数组,并用某些元素填充它,然后从函数中返回该数组。这是我到目前为止所拥有的代码:

代码语言:javascript
复制
char *breedMutation(char genome []){
    size_t genes = sizeof(genome);
    char * mutation = new char[genes];
    for (size_t a = 0 ;a < genes; a++) {
        mutation[a] = 'b';
    }
    return mutation;
}

for循环是用来更新新数组的;现在,它只是一段虚拟代码,但希望这个函数的思想是清晰的。然而,当我在main中调用这个函数时,我得到了一个initializer fails to determine size of ‘mutation’错误。这是我在main中的代码:

代码语言:javascript
复制
int main()
{
    char target [] = "Das weisse leid"; //dummy message
    char mutation [] = breedMutation(target);
    return 0;
}

我需要学习更多关于指针和字符数组的知识,我意识到这一点,但我也在尝试通过示例来学习。

EDIT:这段代码是breedMutation的基础,我正在尝试为字符数组修改它。

代码语言:javascript
复制
int *f(size_t s){
    int *ret=new int[s];
    for (size_t a=0;a<s;a++)
        ret[a]=a;
    return ret;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-27 07:11:22

您的错误是因为您不能将mutation声明为char[],并将breedMutation返回的char*的值赋给它。如果你想这样做,应该将mutation声明为char*,然后在使用完它后声明为deleted,以避免在实际应用程序中发生内存泄漏。

除了动态分配数组并返回数组之外,您的breedMutation函数与f完全不同。f只是创建一个大小为s的数组,并从0开始递增填充数组中的每个索引。如果没有逻辑错误,breedMutation只会用'b'填充数组。

这个错误是sizeof(genome);将返回char*的大小,在普通机器上通常是4或8字节。您需要像f一样传入大小,因为数组在传递给函数时会降级为指针。但是,有了这个代码片段,我就不明白为什么需要传递char genome[]了。

而且,在C++中,您最好使用std::vector甚至std::array这样的容器,而不是动态分配的数组(使用new创建数组),这样您就不必担心释放它们或跟踪它们的大小。在这种情况下,std::string将是一个好主意,因为它看起来像是在尝试处理字符串。

如果你解释了你到底想做什么,它可能会帮助我们告诉你如何解决你的问题。

票数 3
EN

Stack Overflow用户

发布于 2011-11-27 06:57:50

这行代码:

代码语言:javascript
复制
size_t genes = sizeof(genome);

将返回sizeof(char*),而不是genome数组中的元素数。您需要将元素的数量传递给breedMutation()函数:

代码语言:javascript
复制
breedMutation(target, strlen(target));

或者找到将该信息提供给函数的其他方式。

希望这能有所帮助。

编辑:假设它是您实际需要的genome中的元素数量。

票数 2
EN

Stack Overflow用户

发布于 2011-11-27 07:08:29

数组是非常有限的。

更喜欢使用std::vector (或std::string)

代码语言:javascript
复制
std::string breedMutation(std::string const& genome)
{
    std::string mutation;
    return mutation;
}
int main()
{
    std::string target    = "Das weisse leid"; //dummy message
    std::string mutation  = breedMutation(target);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8282221

复制
相关文章

相似问题

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