从函数返回指针数组

时间:2015-12-12 17:13:55

标签: c string function pointers

我想从return_string function返回一个指针数组。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char **return_string(void);

int main(int argc, char *argv[])
{
  int i = 0;
  char **val = return_string();

  for(i = 0; i < 3; i++)
    printf("%s\t%d\n", val[i],val[i]);
  return 0;
}

char **return_string(void)
{
   char* val[] = {"foo", "bar", "something"};
   return val;
}

1.编译完成后,我收到警告function returning address of local variable

2.跑步时,我只是得垃圾而不是我想要的字符串。

知道为什么会这种情况发生,如何从array of pointer返回function

1 个答案:

答案 0 :(得分:1)

val是一个自动变量,因此在return_string返回后它会超出范围。因此,通过超出函数范围的指针修改它是未定义的行为

你可以:

  1. 在免费商店中分配数组:

    char **return_string(void)
    {
       char** val = malloc(sizeof(char*) * 3);
       val[0] = "foo";
       val[1] = "bar";
       val[2] = "something";
       return val;
    }
    
  2. 将指针传递给函数并处理指针:

    void return_string(char** ptr);
    
    ...
    
    char* array[3];
    return_string(array);
    
    ...
    
    void return_string(char** ptr)
    {
        ptr[0] = "foo";
        ptr[1] = "bar";
        ptr[2] = "something";
    }