C и указатель в функции – изменения не сохраняются

У меня есть этот простой код, который, кажется, работает (я проверял с помощью отладчика), но когда выполнение функции заканчивается, строка не сохраняется в исходной переменной.

void getString(char *iText); int main() { char *inputText=malloc(sizeof(char)); getString(inputText); puts(inputText); free(inputText); system("pause"); return 0; } void getString(char *iText) { char c; int i=0; while((c=getchar()) != '\n') { iText = realloc(iText,sizeof(char)*(i+1)); iText[i]=c; i++; } iText = realloc(iText, sizeof(char)*(i+1)); iText[i]='\0'; } 

Когда этот маленький скрипт заканчивается, я вижу некоторые

ε ■ ε ■ ε ■ ε ■ ε ■ ε ■ ε ■ ε ■ ε ■ ε ■ ε ■ ε ■ ▲ יע` *

Если я напишу этот код в своей основной функции, он работает, поэтому я предполагаю, что это связано с тем, как я использую указатель в этой функции.

getString принимает указатель по значению, поэтому не может изменить указатель вызывающего. Передайте указатель на указатель, если вы хотите перераспределить строку

 int main() { .... getString(&inputText); .... } void getString(char **iText) { char c; int i=0; while((c=getchar()) != '\n') { *iText = realloc(*iText, i+1); (*iText)[i]=c; i++; } *iText = realloc(*iText, i+1); (*iText)[i]='\0'; } 

Я сделал еще одно небольшое изменение в вашем коде – sizeof(char) гарантированно будет 1, поэтому вычисления realloc могут быть упрощены