【问题标题】:Returning array of pointer from function从函数返回指针数组
【发布时间】:2015-12-12 17:13:55
【问题描述】:

我想从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.运行时,我得到的只是垃圾而不是我想要的字符串。

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

【问题讨论】:

  • 您不能在 C 中的函数之间传递/返回数组。而且您的代码中没有数组。
  • 并注意警告。那个已经很具体了。
  • @Olaf "你的代码中没有数组" - char* val[] 当然是一个数组。

标签: c string function pointers


【解决方案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";
    }
    

【讨论】:

  • 你能解释一下malloc(sizeof(char*) * 3);是什么意思吗?
  • @LunduHarianja 具体是什么:mallocsizeof(char*) * 3?或两者?您也可以在两者上搜索互联网。
  • @LunduHarianja:我可以推荐参考 C 书籍或好的教程吗?
猜你喜欢
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
相关资源
最近更新 更多