c语言bug收集

1.scanf、gets、fgets、getchar与\n、\0

这些函数在输入字符串的时候对换行符’\n''\0'的处理。

  1. getchar()

    • 输入缓冲区顺序读入一个字符(包括空格、回车和Tab)
    • 运行到此函数扫描缓冲区,取走一个字符,若有取走一个,执行下一台条语句,没有的话等待键盘输入。
    • 返回值是接收的字符。
  2. gets(str)

    • 从输入缓冲区中读取字符串存储到字符指针变量 str 所指向的内存空间.
    • 可以直接输入带空格的字符串
    • 遇到换行符结束
    • 换行符从缓冲区中取出来,直接抛弃,不存在存储到的字符串中
    • 在扫描到的字符串后面添加上字符串结束标志\0
  3. scanf()

    • %s接收字符串一次,不包括键盘中输入的空格
    • 就相当与运行到scanf语句的时候,需要从键盘上输入字符,其中可以包括空格,当按回车也就是换行符的时候结束本次输入,把本次输入的字符串包括最后的换行符放在缓冲区,scanf开始扫描缓冲区,遇到字符就接受,遇到空格和换行符(常用的,其他的没有尝试)就停止,并在接收的字符串后面加上\0(标准的字符串结束字符)。
    • 遇到的空格和换行符不做处理,留在缓冲区。
  4. fgets()

    • 函数原型char *fgets(char *restrict str, int size, FILE *restrict stream))
    • 例子1fgets(a, 4, stdin); 例子2 FILE *fp; fgets (str, 60, fp)
    • 当系统调用这个函数的时,系统便会阻塞等待用户的输入,直到用户输入回车符\n才返回程序。然后用户输入的内容会被系统放进输入缓存区里面,fgets()函数便会进来读取其“第二个参数减1”个字节存进它第一个参数指向的内存地址中
    • 如果在还没读取够需要的字节大小前读取到换行符\n则提前返回.
    • 需要读取的流中已经没有数据了也返回
    • 预留1个字符的空间来存储字符串结束符\0.
    • 会将\n也当作一个字符,存在指定位置。
    • fgets()只负责读取,并不会事先清空参数1指向的地址内存。读取到的字节会覆盖原地址储存,但没有覆盖到的内容还是保持原样
    • fgets()读取键盘输入的时候,如果输入多于其“第二个参数减1”个字符大小的数据,fgets()只会读取走前”第二个参数减1”个字符,多余的字符残留在输入缓存区里面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值