关于scanf防止缓冲区溢出

在使用 scanf 时有时候会出现这样的情况,我们定义一个 buf 来接收输入的字串,当输入的字串长度小于 buf 大小时没有问题,但是当输入的字串长度大于 buf 大小时,则有可能会出现段错误,就是因为 buf 溢出了,下面是一种解决这个问题的方法。出现这个问题的原因就是因为系统的缓冲机制,这个在网上很多文章讲解,这里就不讲解了。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main(int argc,char *argv[])
{
    uint8_t wbuf[5] = {0};

    for(;;)
    {
        printf("please input on | off:\r\n");
        memset(wbuf,0,sizeof(wbuf));
        scanf("%3s",wbuf);//这里%3s可以限制每次读入wbuf的内容大小(即每次读入3个字符),如果不做限制,可能会导致wbuf溢出
        printf("input:%s\r\n",wbuf);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/a1598025967/article/details/99079093