首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助编写getstring函数

帮助编写getstring函数
EN

Stack Overflow用户
提问于 2010-04-15 06:12:51
回答 4查看 5.1K关注 0票数 0

我在编写getstring函数时遇到了一些问题,这就是到目前为止我所知道的。

致敬,V

代码语言:javascript
复制
const char* getstring()
{


    char *buffer;
    int i = 255;

    buffer = (char *)malloc(i*sizeof(char));

    *buffer = getchar();
    while ( *buffer != '\n' )
    {
        buffer++;
        *buffer = getchar();
    }
    *buffer = '\0';

    const char* _temp = buffer;
    return _temp;
}


int main()
{
    char* temp = getstring();

    for ( ;temp++ ; *temp != '\0')
    {
        printf("%c", *temp);
    }

    return 0;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-15 06:16:23

当后者指向字符串的终止'\0'时,您将_temp设置为buffer

移动线条:

代码语言:javascript
复制
const char* _temp = buffer;

紧跟在一行之后:

代码语言:javascript
复制
buffer = (char *)malloc(i*sizeof(char));

这样_temp就指向了缓冲区的开头。

你还有一些其他的问题:

  1. 请勿使用名称_temp -带有前导下划线的名称是保留的;
  2. 您需要测试您在缓冲区中写入的字节数不超过i
  3. 您应该测试返回NULL;
  4. You的代码是否需要测试<
  5. >D18malloc() >是否返回<代码>D19。这意味着在将其赋值给*buffer;
  6. As之前,您需要将getchar()结果存储在int类型的变量中。Michael Mrozek在一条评论中指出,for循环中的表达式是错误的。

...and作为一个风格点,sizeof(char)总是1,所以乘以它是不必要的;在C中,强制转换malloc()的结果是不必要的,并且被认为是不可取的(不像C++,在需要它的地方)。

票数 2
EN

Stack Overflow用户

发布于 2010-04-15 06:15:25

为什么不直接使用

代码语言:javascript
复制
char buffer[255];
scanf("%254s", &buffer);

代码语言:javascript
复制
char* buffer = readline("GO GO GO:");
票数 2
EN

Stack Overflow用户

发布于 2010-04-15 06:17:07

代码语言:javascript
复制
const char* _temp = buffer;

将上面的语句移到malloc调用之后

重要信息:

释放buffermain()中使用后分配给它的内存。

代码语言:javascript
复制
free(temp);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2641431

复制
相关文章

相似问题

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