0

我在编写 getstring 函数时遇到了一些麻烦,这就是我目前所拥有的。

问候,五

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

4 回答 4

2

为什么不直接使用

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

或者

char* buffer = readline("GO GO GO:");
于 2010-04-14T22:15:25.210 回答
2

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

移动线:

const char* _temp = buffer;

紧跟在该行之后:

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

所以它_temp指向缓冲区的开始。

你还有一些其他问题:

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

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

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

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

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

...并且作为风格点,sizeof(char)始终为 1,因此不需要乘以它;并且在 C 中强制转换结果malloc()是不必要的,并且被认为是不可取的(与需要它的 C++ 不同)。

于 2010-04-14T22:16:23.137 回答
1
const char* _temp = buffer;

在调用后将上述语句移至malloc

重要
提示:在buffer.main()

free(temp);
于 2010-04-14T22:17:07.440 回答
0

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

于 2010-04-14T22:15:35.633 回答