如何解决如何从函数返回char数组?
| 我尝试了以下方法:char[10] testfunc()
{
char[10] str;
return str;
}
解决方法
最好作为out参数:
void testfunc(char* outStr){
char str[10];
for(int i=0; i < 10; ++i){
outStr[i] = str[i];
}
}
用
int main(){
char myStr[10];
testfunc(myStr);
// myStr is now filled
}
,您必须意识到char[10]
与char*
相同。实际上,您正在返回一个指针。现在,指针指向一个变量(str
),该变量在退出函数后立即销毁,因此指针指向...没有任何内容!
通常在C中,在这种情况下,您会显式分配内存,函数结束时不会销毁内存:
char* testfunc()
{
char* str = malloc(10 * sizeof(char));
return str;
}
请注意!现在,ѭ5指向的内存永远不会被破坏。这被称为“内存泄漏”。完成后,请确保将内存“ 8”:
foo = testfunc();
// do something with your foo
free(foo);
,当您使用C ++时,可以使用std::string
。
,char *返回一个char数组,但是您编写的函数不起作用,因为您返回的是一个自动变量,该变量在函数退出时会消失。
使用这样的东西:
char *testfunc() {
char* arr = malloc(100);
strcpy(arr,\"xxxx\");
return arr;
}
当然,如果您要返回的是C形式的数组,则不是std ::或boost ::或其他东西。
如评论部分所述:
记住要从调用方释放内存。
,使用Boost:
boost::array<char,10> testfunc()
{
boost::array<char,10> str;
return str;
}
函数不能返回普通的char[10]
(或任何其他数组)。
,当您在函数内部创建在堆栈中创建的局部变量时,最有可能在退出函数时在内存中被覆盖。
因此在大多数c ++实现中,这样的代码将不起作用:
char[] pupulateChar()
{
char* ch = \"wonet return me\";
return ch;
}
一种解决方法是创建要在函数外部或要在其中使用的变量,然后将其作为参数传递并操纵函数,例如:
void populateChar(char* ch){
strcpy(ch,\"fill me will,this will stay\",size); // this will work as long it won overflow it.
}
int main(){
char ch[100]; // reserve memory in stack outside the function
populateChar(ch); //populate array
}
c ++ 11解决方案,使用std :: move(ch)将左值转换为右值
void populateChar(char* && fillme){
fillme = new char[20];
strcpy(fillme,\"this worked for me\");
}
int main(){
char* ch;
populateChar(std::move(ch));
return 0;
}
或c ++ 11中的此选项:
char* populateChar(){
char* ch = \"test char\";
// will change from lvalue to r value
return std::move(ch);
}
int main(){
char* ch = populateChar();
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。