我想从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
返回后它会超出范围。因此,通过超出函数范围的指针修改它是未定义行为。
你可以:
在免费存储上分配数组:
char **return_string(void) { char** val = malloc(sizeof(char*) * 3); val[0] = "foo"; val[1] = "bar"; val[2] = "something"; return val; }
将指针传递给函数并处理指针:
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/