如何从一个函数返回本地字符数组
char* testfunction()
{
char array[] = "Hello World";
return array;
}
char main()
{
char* array = testfunction();
printf(" %s -> string", array);
return 0;
}
此代码导致未知错误
�@$�@<��Ʉ�;���Y@��� -> 字符串
如何从一个函数返回本地字符数组
char* testfunction()
{
char array[] = "Hello World";
return array;
}
char main()
{
char* array = testfunction();
printf(" %s -> string", array);
return 0;
}
此代码导致未知错误
�@$�@<��Ʉ�;���Y@��� -> 字符串
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;
}
您不应该直接返回堆栈变量的地址,因为一旦堆栈帧被删除(函数返回后),它就会被销毁。
你可以这样做。
#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;
}
也许,这就是你想要的:
const char *testfunction(void)
{
return "Hello World";
}
您不能返回局部变量的地址。(如果你使用 gcc,你应该得到一些警告)
您可以尝试改用关键字static
:
char *test()
{
static char array[] = "hello world";
return (array);
}