按值传递字符数组并从函数返回一个新的字符数组?

时间:2011-11-26 22:47:55

标签: c++ arrays

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

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中的代码:

int main()
{
    char target [] = "Das weisse leid"; //dummy message
    char mutation [] = breedMutation(target);
    return 0;
}

我需要了解有关指针和字符数组的更多信息,我知道,但我也想通过示例来学习。

编辑:这个代码,我正在尝试修改字符数组,是breedMutation的基础。

int *f(size_t s){
    int *ret=new int[s];
    for (size_t a=0;a<s;a++)
        ret[a]=a;
    return ret;
}

4 个答案:

答案 0 :(得分:3)

您的错误是因为您无法将mutation声明为char[],并为其分配char*返回的breedMutation的值。如果你想这样做,mutation应该被声明为char*然后delete d一旦你完成它以避免实际应用程序中的内存泄漏。

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

该错误是char*将返回f的大小,通常在普通计算机上为4或8个字节。你需要传递大小为char genome[],因为数组在传递给函数时被降级为指针。但是,根据该片段,我不明白为什么你需要传递std::vector

此外,在C ++中,最好使用容器,例如std::array甚至new,而不是动态分配的数组(使用std::string创建它们的数组)这样你就不必担心释放它们或跟踪它们的大小。在这种情况下,{{1}}会是一个好主意,因为看起来你正在尝试使用字符串。

如果你解释一下你究竟想做什么,可能会帮助我们告诉你如何处理你的问题。

答案 1 :(得分:2)

该行:

size_t genes = sizeof(genome);

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

breedMutation(target, strlen(target));

或找到向该功能提供该信息的其他方式。

希望有所帮助。

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

答案 2 :(得分:2)

阵列非常有限 更喜欢使用std :: vector(或std :: string)

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);
}

答案 3 :(得分:1)

尝试用:

替换main()的第二行
char* mutation = breedMutation(target);

另外,不要忘记在最后删除你的变异变量。