您当前的位置:首页 > 计算机 > 编程开发 > C语言

怎样防止用户向一个内存区域中输人过多的字符?

时间:12-30来源:作者:点击数:

有两个原因要防止用户向一个内存区域中输入过多的字符:第一,你可能只希望处理固定数目的字符;第二,可能也是更重要的原因,如果用户输入的字符数超过了缓冲区的容量,就会溢出缓冲区并且破坏相邻的内存数据。这种潜在的危险在C指南书籍中常常会被忽略。例如,对于下面的这段代码,如果用户输入的字符超过了50个,那将是很危险的:
  char bufE50];
  scanf("%s",buf);

解决这个问题的办法是在scanf()中指定要读入的字符串的最大长度,即在“%”和“s”之间插入一个数字,例如:
    "%50s"

这样,scanf()将最多从用户那里接受50个字符,任何多余的字符都将保留在输入缓冲区中,并且可以被其它的scanf()所获取。

还有一点需要注意,即字符串需要有一个NUL终止符。因此,如果要从用户那里接受50个字符,那么字符串的长度必须是51,即50个字符供真正的字符串数据使用,还有一个字节供NUL终止符使用。

下面的程序测试了这种方法:

# include <stdio. h>
/*
      Program to show how to stop the
      user from typing too many characters in
      a field.
*/
int main()
{
    char str[50]; /* This is larger than you really need * /
    /*
       Now, accept only TEN characters from the user. You can test
          this by typing more than ten characters here and seeing
          what is printed.
    */
    scanf( "%10s", str);
    /*
          Print the string, verifying that it is, at most, ten characters.
    */
    printf( "The output is : %s. \n", str) ;
    return (0) ;
}

下面是这个程序的一个运行例子。当输入supercalifragilisticexpialidocious后,程序将输出supercalif.

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门