如果我现在完全误解了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;
}
答案 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);
另外,不要忘记在最后删除你的变异变量。