1

我有这个似乎可以工作的简单代码(我用调试器检查过),但是当函数执行结束时,字符串不会保存在原始变量中。

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 函数中编写这段代码,它就可以工作,所以我猜这与我在函数中使用指针的方式有关。

4

1 回答 1

7

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可以简化计算

于 2013-01-03T16:47:14.253 回答