Указатели на строку в функциях

кажется, что я застрял в некоторых основах. Может кто-нибудь объяснить мне, почему следующий код:

#include <stdlib.h>

void Test1(char *t)
{
    t = (char *)malloc(11);
    strcpy(t, "1234567890");
}

void Test2(char **t)
{
    *t = (char *)malloc(11);
    strcpy(*t, "1234567890");
}

void Test3(char *t)
{
    strcpy(t, "1234567890");
}

char * Test4(char *t)
{
    t = (char *)malloc(11);
    strcpy(t, "1234567890");
    return t;
}

int main()
{
    char *t1 = NULL;
    Test1(t1);
    printf("\nTest1: %s\n", t1);

    char *t2 = NULL;
    Test2(&t2);
    printf("\nTest2: %s\n", t2);

    char *t3 = (char *)malloc(11);
    Test3(t3);
    printf("\nTest3: %s\n", t3);

    char *t4 = NULL;
    t4 = Test4(t4);
    printf("\nTest4: %s\n", t4);

    return 0;
}

дает следующий результат:

Test1: (null)

Test2: 1234567890

Test3: 1234567890

Test4: 1234567890

Что не так с функцией Test1? И почему Test4, который почти аналогично Test1, работает? Более общий вопрос: как правильно создать строку в функции и вернуть на нее указатель?

5
задан JL2210 7 June 2019 в 22:28
поделиться