帮助编写getstring函数

时间:2010-04-14 22:12:51

标签: c getstring

我在写一个getstring函数时遇到了一些麻烦,这就是我到目前为止所做的。

此致 V

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

4 个答案:

答案 0 :(得分:2)

为什么不使用

char buffer[255];
scanf("%254s", &buffer);

char* buffer = readline("GO GO GO:");

答案 1 :(得分:2)

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

移动线:

const char* _temp = buffer;

紧接在该行之后:

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

以便_temp指向缓冲区的开头。

您还有其他一些问题:

  1. 请勿使用名称_temp - 保留带有前导下划线的名称;

  2. 您需要测试不要将超过i个字节写入缓冲区;

  3. 您应该测试malloc()返回NULL;

  4. 您需要测试返回getchar()的{​​{1}}。这意味着您需要将EOF结果存储在getchar()类型的变量中,然后再将其分配给int;

  5. 正如Michael Mrozek在评论中指出的那样,*buffer循环中的表达方式是错误的。

  6. ......作为一种风格,for总是1,所以乘以它是不必要的;并且在C中转换sizeof(char)的结果是不必要的,并且被认为是不合需要的(与C ++不同,它是必需的)。

答案 2 :(得分:1)

const char* _temp = buffer;

在调用malloc

之后移动上述语句

<强> 重要的:
免费buffer中使用后分配给main()的内存。

free(temp);

答案 3 :(得分:0)

您需要在调用malloc()后立即跟踪分配的指针 - malloc()返回的值 - 以便您可以将其传递回调用方。您还应该检查EOF和换行符 - 这需要int(而不是char)来保存getchar()的值。至少!