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)
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)
Fli*_*sch 12
当你使用C++时,你可以使用std::string.
char*返回一个char数组,但是你编写的函数不起作用,因为你返回一个自动变量,当函数退出时它会消失.使用这样的东西:
char *testfunc() {
char* arr = malloc(100);
strcpy(arr,"xxxx");
return arr;
}
Run Code Online (Sandbox Code Playgroud)
当然,如果你在C语义中返回一个数组,而不是std ::或boost ::或其他东西.正如评论部分所述:记得从调用者那里释放内存.
| 归档时间: |
|
| 查看次数: |
118819 次 |
| 最近记录: |