2025年3月28日 星期五 甲辰(龙)年 月廿七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

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

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

有两个原因要防止用户向一个内存区域中输入过多的字符:第一,你可能只希望处理固定数目的字符;第二,可能也是更重要的原因,如果用户输入的字符数超过了缓冲区的容量,就会溢出缓冲区并且破坏相邻的内存数据。这种潜在的危险在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.

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