我想从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
?
答案 0 :(得分:1)
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";
}