在fork()之后,为什么存储从另一个函数返回的malloc char**的局部变量不显示任何内容?

在fork()之后,为什么存储从另一个函数返回的malloc char**的局部变量不显示任何内容?,c,linux,unix,C,Linux,Unix,我写了一个小程序来学习fork(),问题就在这里 int main() { char **str = NULL; int pid; str = get_command(); printf("befork fork(), str[0] = %s, str[1] = %s\n", str[0], str[1]); if((pid = fork()) == 0) { printf("str[0] = %s, str[1] = %s\

我写了一个小程序来学习
fork()
,问题就在这里

int main()
{
    char **str = NULL;
    int pid;

    str = get_command();

    printf("befork fork(), str[0] = %s, str[1] = %s\n", str[0], str[1]);

    if((pid = fork()) == 0)
    {
        printf("str[0] = %s, str[1] = %s\n", str[0], str[1]);
    }
    else
    {
        printf("str[0] = %s, str[1] = %s\n", str[0], str[1]);
    }
}
char **get_command()
{
    char *cmd[2];
    cmd[0] = malloc(6);
    memcpy(cmd[0], "hello\0", 6);

    cmd[1] = malloc(6);
    memcpy(cmd[1], "world\0", 6);

    return cmd;
}
get_command()。为什么?

在get_command()函数中,我定义了一个char*cmd[2]

您还应该为阵列分配一些存储空间

char **cmd;
cmd = malloc(2 * sizeof(char*));
否则就不行了


如果您只是将其定义为
char*cmd[2]在函数体中,则它是一个局部变量,函数返回后其内容将不被定义。

显示
get\u命令的实现。
。显示代码而不是描述它。调试101:检查您的假设(即
str
get\u命令()之后和
fork()之前的内容)
)。
返回cmd函数返回局部变量的地址。(cmd是一个数组,但由于数组不能作为一个整体返回,它会退化为指针;指针也与函数的返回类型相对应)