在使用 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;
}