如何从函数返回char数组?

Dat*_*las 26 c++ arrays return function

我尝试过以下方法:

char[10] testfunc()
{
    char[10] str;

    return str;
}
Run Code Online (Sandbox Code Playgroud)

Xeo*_*Xeo 45

最好作为输出参数:

void testfunc(char* outStr){
  char str[10];
  for(int i=0; i < 10; ++i){
    outStr[i] = str[i];
  }
}
Run Code Online (Sandbox Code Playgroud)

叫着

int main(){
  char myStr[10];
  testfunc(myStr);
  // myStr is now filled
}
Run Code Online (Sandbox Code Playgroud)

  • 请将容量作为参数传递,这种方式太脆弱了. (14认同)
  • 另外,复制输出结果时,`strncpy`或`memcpy`会更有效. (4认同)

Mar*_*iet 15

你必须意识到这char[10]是一样的char*.你实际上是在返回指针.现在指针指向一个变量(str),一旦退出函数就会被销毁,所以指针指向......什么都没有!

通常在C中,在这种情况下显式分配内存,当函数结束时不会销毁内存:

char* testfunc()
{
    char* str = malloc(10 * sizeof(char));
    return str;
}
Run Code Online (Sandbox Code Playgroud)

请注意!指向的记忆str现在永远不会被破坏.这被称为"内存泄漏".free()完成后请确保内存:

foo = testfunc();
// do something with your foo
free(foo); 
Run Code Online (Sandbox Code Playgroud)

  • char数组与char指针不同.请参阅[C FAQ问题6.2](http://c-faq.com/aryptr/aryptr2.html). (6认同)
  • 公平地说,马金说的是“相似”。从链接的常见问题解答中“数组不是指针,尽管它们密切相关(参见问题 6.3)并且可以类似地使用。” 这基本上就是 Marjin 所说的。 (2认同)

Fli*_*sch 12

当你使用C++时,你可以使用std::string.

  • 当你回答问题时,你可以继续主题。用户询问**如何**从函数返回_char数组_,而不是**她/他应该使用什么**。_原因_为什么 char 数组是未知的。这可能是一种练习,也可能是一项家庭作业,也可能是在幕后观察……最好不要假设。 (2认同)

Fel*_*ano 7

char*返回一个char数组,但是你编写的函数不起作用,因为你返回一个自动变量,当函数退出时它会消失.使用这样的东西:

char *testfunc() {
    char* arr = malloc(100);
    strcpy(arr,"xxxx");
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

当然,如果你在C语义中返回一个数组,而不是std ::或boost ::或其他东西.正如评论部分所述:记得从调用者那里释放内存.