Malloc-Speicher auf einen Zeiger auf Zeiger

Ich bin auf dieses Problem gestoßen, als ich Zeiger auf Zeiger auf ein Zeichen verwendete:

<code>void setmemory(char** p, int num)
{
    *p=(char*)malloc(num);
}

    void test(void)
    {
        char* str=NULL;
        setmemory(&str,100);
        strcpy(str,"hello");
        printf(str);
    }

int main()
{
    test();
    return 0;
}
</code>

Der obige Code ist korrekt, aber ich kann nicht herausfinden, warum ein Zeiger auf einen Zeiger char ** p hier verwendet wird. Warum stattdessen nur einen Zeiger auf ein Zeichen verwenden? Also habe ich dieses Snippet in unten geändert und festgestellt, dass es nicht funktioniert. Kann mir jemand sagen, warum? Vielen Dank!

<code>void setmemory(char* p, int num)
{
    p=(char*)malloc(num);
}

void test(void)
{
    char* str=NULL;
    setmemory(str,100);
    strcpy(str,"hello");
    printf(str);
}

int main()
{
    test();
    return 0;
}
</code>

Antworten auf die Frage(4)

Ihre Antwort auf die Frage