首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数中的C和指针-更改不保存

函数中的C和指针-更改不保存
EN

Stack Overflow用户
提问于 2013-01-03 16:45:57
回答 1查看 1.8K关注 0票数 1

我有这段简单的代码,看起来很好用(我和调试器检查过了),但是当函数执行结束时,字符串不会保存在原始变量中。

代码语言:javascript
运行
复制
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';
}

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

ε▲יע`*

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-03 16:47:14

getString按值获取指针,因此不能更改调用方的指针。如果要重新分配字符串,则将指针传递给指针。

代码语言:javascript
运行
复制
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计算。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14143274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档