c - 从函数返回指针数组

标签 c string function pointers

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

#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.编译时,我收到警告函数返回局部变量的地址

2.运行时,我只是得到垃圾而不是我想要的字符串。

知道为什么会发生这种情况以及如何从函数返回指针数组吗?

最佳答案

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";
    }
    

关于c - 从函数返回指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34242656/

相关文章:

c - 2`s complement in 3.13 format(取值范围是-4~3.99)是什么意思?

java - 使用分隔符提取字符串中间的数字

c++ - 为什么当您尝试使用 arr = {values} 为数组赋值时会发生错误?

Java 8/9 : Can a character in a String be mapped to its indices (using streams)?

c++ - 关于比较字符串与字符串

mysql - mysql 中的函数是否仅在连接期间存在?

c - 如何在数组中编写函数

R:将字符串作为参数传递时没有引号

地址可以类型转换吗?

c++ - C/C++ - 推荐使用 const static 还是 #define