如何从一个函数返回本地字符数组
char* testfunction()
{
char array[] = "Hello World";
return array;
}
char main()
{
char* array = testfunction();
printf(" %s -> string", array);
return 0;
}
这些代码会导致未知错误
@ $ @< Ʉ ; Y@ - >串
答案 0 :(得分:7)
当testfunction()
在main()中返回array
变为悬空指针时,您将返回指向局部变量的指针。
使用std::string
代替
#include <string>
#include <iostream>
std::string testfunction()
{
std::string str("Hello World");
return str;
}
int main()
{
std::cout << testfunction() << std::endl;
return 0;
}
答案 1 :(得分:5)
您不应直接返回堆栈变量的地址,因为一旦删除堆栈帧(在函数返回后)它就会被销毁。
你可以这样做。
#include <stdio.h>
#include <algorithm>
char* testfunction()
{
char *array = new char[32];
std::fill(array, array + 32, 0);
snprintf(array, 32, "Hello World");
return array;
}
int main()
{
char* array = testfunction();
printf(" %s -> string", array);
delete[] array;
return 0;
}
答案 2 :(得分:1)
也许,这就是你想要的:
const char *testfunction(void)
{
return "Hello World";
}
答案 3 :(得分:0)
您无法返回本地变量的地址。 (如果你使用gcc,你应该得到一些警告)
您可以尝试使用关键字static
代替:
char *test()
{
static char array[] = "hello world";
return (array);
}