вам нужно сделать name выходным параметром, если вы продолжаете давать его в качестве параметра, в настоящее время он является только локальным и никаких изменений не видно за пределами fun
void fun(char** name);
int main(){
char* name = NULL;
fun(&name);
printf("%s",name);
}
void fun(char** name){
char input[SIZE];
int length;
printf("Please enter a name:\n");
scanf("%s",input);
length = strlen(input);
*name = (char*)malloc(sizeof(char)*length+1);
if(*name == NULL){
exit(1);
}
strcpy(*name, input);
}
Как видите, я даю адрес переменной name , позволяющей изменить ее значение в fun , поэтому тип является указателем на char*
, являющимся char**
Выполнение:
pi@raspberrypi:/tmp $ ./a.out
Please enter a name:
aze
aze
Вам не хватает свободного имя
Предупреждение : если входное значение больше SIZE у вас будет неопределенное поведение при записи input , предполагая, что SIZE не является константой или может измениться позже, лучше сделать что-то подобное:
void fun(char** name){
char input[SIZE];
int length;
char fmt[16];
printf("Please enter a name:\n");
sprintf(fmt, "%%%ds", SIZE);
scanf(fmt, input);
length = strlen(input);
*name = (char*)malloc(sizeof(char)*length+1);
if(*name == NULL){
exit(1);
}
strcpy(*name, input);
}
Как видите, я делаю формат scanf , например, если SIZE значения 10, используемый формат будет "% 10s"