繁体   English   中英

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

[英]Pass character array by value and return a new character array from the function?

对于目前完全误解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'错误, initializer fails to determine size of 'mutation' 这是我主要的代码:

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

您的错误是因为您无法将mutation声明为char[]并且无法为其指定由breedMutation返回的char*的值。 如果要执行此操作,则应将mutation声明为char* ,然后在完成操作后将其delete ,以避免在实际应用程序中发生内存泄漏。

除了动态分配数组并返回它之外,您的breedMutation功能与f f只是创建一个大小为s的数组,并从0开始以增量方式填充该数组中的每个索引。如果没有逻辑错误, breedMutation只会用'b'填充该数组。

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

另外,在C ++中,最好使用诸如std::vector甚至std::array类的容器,而不是动态分配的数组(在其中使用new来创建它们的数组),这样您就不必担心关于释放它们或跟踪其大小。 在这种情况下, std::string会是一个好主意,因为您似乎正在尝试使用字符串。

如果您确切说明您要尝试执行的操作,则可能会帮助我们告诉您如何解决您的问题。

该行:

size_t genes = sizeof(genome);

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

breedMutation(target, strlen(target));

或找到将信息提供给功能的其他方法。

希望能有所帮助。

编辑:假设这是您真正想要的genome中的元素数量。

数组非常有限。
优先使用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);
}

尝试将main()的第二行替换为:

char* mutation = breedMutation(target);

另外,不要忘记最后删除突变变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM