кажется, что я застрял в некоторых основах. Может кто-нибудь объяснить мне, почему следующий код:
#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, работает? Более общий вопрос: как правильно создать строку в функции и вернуть на нее указатель?