C和指针的函数 - 改变不救(C and pointer in a function - chang

2019-07-17 19:19发布

我有这个简单的代码,似乎工作(我与调试检查),但是当函数执行结束,该字符串不会被保存在原来的变量。

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';
}

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

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

如果我写这段代码在我的主要功能它的工作,所以我猜它是与我使用的函数指针的方式。

Answer 1:

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



文章来源: C and pointer in a function - changes do not save