我有这段简单的代码,看起来很好用(我和调试器检查过了),但是当函数执行结束时,字符串不会保存在原始变量中。
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';
}
当这个小剧本结束时,我看到一些
ε▲יע`*
如果我在我的主函数中编写这段代码,它就能工作,所以我猜这与我在函数中使用指针的方式有关。
发布于 2013-01-03 16:47:14
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
计算。
https://stackoverflow.com/questions/14143274
复制相似问题