如何从函数返回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;
}
    

要回复问题请先登录注册