|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小伙计们,我又回来了。
这次给大家带来vs2013中的scanf_s()函数,最近有个朋友问我一段代码怎么错了,他抓破脑皮也想不出来,他的vs版本是2010版的,其实跟这个也是有关系的,我开始有没有注意到,看了一遍 没啥毛病啊,我一编译,确实报错了,提示的信息是,gets()这个函数是不安全的,建议查看啥啥啥,之类的话,跟现在vs不能使用scanf()的函数是一个意思。那么咱们得多了解下安全版的输入函数所会碰见的问题哈。
首先整形啦,浮点型之类的类型使用这个函数跟原来的输入函数差不多(友情提示一点,你不要错误的认为后面跟的那个数可以改变你输入的位数,编译器不会报错,就是那个数形同虚设)
那么咱们唠唠输入字符串吧,首先先说如果你定义的是字符型的变量,那么输入函数写完这个字符的地址之后得再加个,写上数量1,要不然是不能正常的赋值的。(在这当中我可是深受其害啊!!还有一点是已经尝试,如果你把格式控制符改为%s 那么无论输入啥都不会正常写入。)
那么继续说如果是输入的字符串,格式自然是%s,后面跟数组的地址,再写上你要写的大小。(这个大小可有故事喽)如果不涉及到while函数的输入,那么还好,你只需要考虑着一点,是啥尼,就是你输入的字符串要减去1个数量,因为你敲的回车也算是一个字符,若是你输入的字符等于那个控制数量的数,那么你的数据一个都不能正常输入进去。
之后说说再不好的情况呢,那就使用while(scanf_())函数,用是否正常输入来判断是否进入循环,那先说你输入字符串低于你限制的数量会出现什么情况呢,编译器会在回车符(自动转换为/0)之后的位置补上-2值,补上其他值我也就不说了,重要的是啥呢。比如你限制的5个字符,你第一次输入三个字符加一个回车,那么编译器会在第五个位置添加一个-2值,你再正常输入4个字符。咱们输入不就是为了用嘛,那就for循环打印吧,按照字符,循环8次,那么你会发现在第五个位置会出现一个中文的字,是啥情况呢,我设了一个断点跟踪发现,在第五次输出的时候用printf()屏幕上是不会出现东西的,但是它还是正常调回执行下一次,等输出紧挨着它的下一个字符就会输出这个字符,就说明-2printf()认为它不应该单独出现,而是跟你下一个字符一起出现在一起组成一个汉字。
这些情况唠完之后,那么咱们还出while循环啊,输入啥东西咱们能出来呢,在visual c++6.0版本 你只有在你只输入ctrl+z才会退出循环(前面不能带有字符串),那么这个scanf_s()可不吃你这套,比如你设置数量为5个字符,你需要输入三个字符加一个ctrl+z 加一个回车 才会正常退出。
这玩意可是我经历了苦难探险才试出来的(ps:意思就是顶贴呗,没人回复都没啥动力啊)
超过五人顶贴我就给大家出下一期的贴子,绝对有料
|
|