как изменить char * global? - PullRequest
       19

как изменить char * global?

0 голосов
/ 08 октября 2019

как изменить char * string3 global?

int add_on(void);
char* string1 = "hello ";
char* string2 = "world ";
char* string3 ;

int main(){            
    add_on();// calling add_on();
    printf("%s\n",string3); // print

}

int add_on(){

    char * string3 = (char *) malloc(1 + strlen(string1)+ strlen(string2));
    strcpy(string3, string1);
    printf("This is string 3: %s\n",string3);
    strcat(string3, string2);
    printf("This is string 3: %s\n",string3);

    return 0;
}

This is what I get from the console: 

This is string 3: hello 
This is string 3: hello world 
(null)
Program ended with exit code: 0

Почему это NULL? как я могу изменить глобальную функцию char * в меняющейся внутри add_on ()?

1 Ответ

0 голосов
/ 15 октября 2019

Как уже указывалось в комментариях, string3 не должно быть снова объявлено внутри функции add_on().

Здесь - некоторая справочная информация о области видимости переменных в C.

В дополнение к этому, было бы чище free выделенной памяти перед завершением и довернуть значение из main.

int add_on(void);
char* string1 = "hello ";
char* string2 = "world ";
char* string3;

int main()
{
    add_on(); // calling add_on();
    printf("%s\n", string3); // print
    free(string3);
    return 0;
}

int add_on()
{
    string3 = (char*)malloc(1 + strlen(string1) + strlen(string2));
    strcpy(string3, string1);
    printf("This is string 3: %s\n", string3);
    strcat(string3, string2);
    printf("This is string 3: %s\n", string3);
    return 0;
}
...