函数中的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'; } 

当这个小脚本结束时,我看到一些

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

如果我在我的main函数中编写这段代码它正在工作,所以我猜这与我在函数中使用指针的方式有关。

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计算