0

代码 1:-

int main()
{
    char str[200];
    fgets(str,200,stdin);
    printf("%s",str);
    return 0;
}

输出:-

ab cd
ab cd
(line feed)

代码 2:-

int main()
{
    char str[200];
    gets(str);
    printf("%s",str);
    return 0;
}

输出:-

ab cd
ab cd

当我输入ab(space)cd(enter key)时,如果fgets()我在输出中得到 a line feed,而在 的情况下gets(),则不会显示新的换行符。在这种情况下
是怎么回事。line feed

4

1 回答 1

1

gets()fgets()FILE入提供的缓冲区,直到检测到换行为止。前者存储 aNUL 而不是换行符,后者将 a 放置在NUL 换行符之后

请注意这gets()不安全的,因为它不提供任何方法来保护超出所传递缓冲区限制的写入。

fgets()获取缓冲区的大小,如果达到此大小,则停止读取。在后一种情况下,读取可能会在读取任何新行之前停止。

对于在缓冲区末尾切断各种换行符的一般方法,您可能想看看这个答案:https ://stackoverflow.com/a/16000784/694576

于 2014-03-02T08:31:24.930 回答