fgets函数和缓冲区示例

fgets函数是gets函数的替代品,C11标准已经废除gets函数.

  • fgets函数的第2个参数, 它指明了读入字符的最大数量,一般传入数组的长度,如果该参数的值是n,那么fgets将读入包括换行符在内的n-1个字符,数组最后一个位置会自动存空字符'\0'.
  • fget的返回值为一个char *指针,指向输入的内容第一个字符

下面回显程序去掉了fgets读取的换行符,如果输入字符过多则丢弃

#include <stdio.h>
#define STLEN 10
int main(void)
{
    char words[STLEN];
    int i;
    
    puts("Enter strings (empty line to quit):");
    puts("------------------");        
    while (fgets(words, STLEN, stdin) != NULL
                          && words[0] != '\n')
    {   

        i = 0;
        while (words[i] != '\n' && words[i] != '\0')
            i++;
        if (words[i] == '\n')
        {
            printf("i = %u  replace \'\\n\'  to \'\\0\' \n",i);
            words[i] = '\0';
        }
        else // must have words[i] == '\0'
        {   
            printf("words[%u] == \'\\0\' \n",i);
            while (getchar() != '\n')// 获取缓冲区下一个字符
                // continue;//作用是丢弃剩余的字符
                puts("continue");
        }

        // for(int j=0;j<STLEN;j++){
        //     printf(" words[%d] to int is %u \n",j,words[j]);
        // }
        puts(words);
        puts("------------------");        
    }
    puts("done");
    return 0;
}

下面是程序的输出示例

Enter strings (empty line to quit):
------------------
12345678
words[8] replace '\n'  to '\0'
12345678

键盘输入12345678,那么包括回车换行符共向程序缓冲区输入了9个字符:12345678\n,fgets 全部获得.
则存在数组中的为10个字符:12345678\n'\0',然后替换成了12345678'\0''\0'
------------------
123456789
words[9] == '\0'
123456789

输入123456789\n, 缓冲区共10个字符, fgets获得9个字符,则存在数组中的为123456789'\0'
此时还有个换行符\n存在缓冲区,由getchar()取出,然后什么都不做进入下一轮主循环
------------------
1234567890
words[9] == '\0'
continue
123456789

输入1234567890\n, 缓冲区共11个字符, fgets获得9个字符,则存在数组中的为123456789'\0'
此时还有个0和换行符在缓冲区,getchar()先取出0打印continue然后取出换行符while结束,进入下一轮主循环
------------------
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,899评论 0赞 5
  • PHP常用函数大全 usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解...
    上街买菜丶迷倒老太阅读 1,560评论 0赞 20
  • 总结了一些开发中常用的函数: usleep() //函数延迟代码执行若干微秒。 unpack() //函数从二进制...
    ADL2022阅读 596评论 0赞 3
  • 在记忆深处可以清晰地看见许多事情,许多开始是模糊的样子,后来慢慢变得清晰起来,但一切都只是泛黄的回忆。有人选择用文...
    南有麋鹿0io阅读 950评论 0赞 1
  • 英文部分及图片来自“经济学人”杂志。译文是个人学习、欣赏语言之用,谢绝转载或用于任何商业用途。本人同意简书平台在接...
    开心果儿92阅读 758评论 0赞 0

友情链接更多精彩内容