微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从函数返回char数组?

如何解决如何从函数返回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 举报,一经查实,本站将立刻删除。