[英]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.