1

如何从一个函数返回本地字符数组

char* testfunction()
{
char array[] = "Hello World";
 return array;
}

char main()
{
 char* array = testfunction();
 printf(" %s -> string", array);
 return 0;
}

此代码导致未知错误

�@$�@<��Ʉ؅�;���Y@��� -> 字符串

4

4 回答 4

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;
}
于 2013-08-26T12:39:31.883 回答
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;
}
于 2013-08-26T12:39:28.843 回答
1

也许,这就是你想要的:

const char *testfunction(void)
{
        return "Hello World";
}
于 2013-08-26T12:47:08.067 回答
0

您不能返回局部变量的地址。(如果你使用 gcc,你应该得到一些警告)

您可以尝试改用关键字static

char    *test()
{
  static char array[] = "hello world";
  return (array);
}
于 2013-08-26T12:46:11.997 回答