| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6253 人关注过本帖, 1 人收藏
标题:弱弱的问下scanf警告问题
只看楼主 加入收藏
凌烟
Rank: 2
等 级:论坛游民
帖 子:30
专家分:41
注 册:2011-1-10
结帖率:66.67%
收藏(1)
已结贴  问题点数:18 回复次数:12 
弱弱的问下scanf警告问题
在visual studio 2008的环境下为什么每次用到scanf函数时候都会有警告//warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.,是什么原因?该则么把这个警告消除.将scanf_s替换scanf后没有警告了,不过输出的时候会有问题了。
搜索更多相关主题的帖子: online function details instead warning 
2011-07-20 21:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:8 
在Windows環境下,不推薦用ANSI字符串類型,已經廢止printf()系列函數,改用後面帶_s的函數形式,採用unicode字符串。用scanf()函數接收的字符串,將有可能出錯,ANSI是用0結束的字串,但unicode字串有些字符的第二位是0,這樣scanf()就只收到0之前的那一串代碼。現在的Windows,内部全部使用unicode字符串進行處理,如果你的程序強行採用ANSI字符串形式,則Windows會多做一個動作,將這些字符串轉換為unicode碼,在返還給你的程序時,若用printf(),又要再轉回ANSI碼。新型的C編譯器給出這個警告,是有道理的。一般警告類信息,可以不理睬而強行編譯,也能通過,但不保證執行正常。

[ 本帖最后由 TonyDeng 于 2011-7-20 22:51 编辑 ]

授人以渔,不授人以鱼。
2011-07-20 22:46
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:2 
2L正解
2011-07-20 22:49
gaob04
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-7-7
收藏
得分:0 
呵呵,遇到同样的问题了,谢谢2L解惑~~
2011-07-21 09:05
deng520126
Rank: 2
等 级:论坛游民
帖 子:17
专家分:46
注 册:2011-7-20
收藏
得分:0 
直接跳过 无视
2011-07-21 09:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
只顶5楼,只认为5楼是正确的
2011-07-21 09:33
kelas
Rank: 6Rank: 6
等 级:侠之大者
帖 子:176
专家分:434
注 册:2010-5-28
收藏
得分:0 
以下是引用rjsp在2011-7-21 09:33:16的发言:

只顶5楼,只认为5楼是正确的
5L有讲原因么
2011-07-21 09:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
以下是引用kelas在2011-7-21 09:49:40的发言:

5L有讲原因么
要讲什么原因???
一个弱智在大街上说天塌下来了,5楼一个晒衣服人说“别理那个弱智”,你需要5楼讲出什么原因?

2011-07-21 10:55
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:4 
scanf是向内存里面写数据,给出的地址是否合法还要看程序员是否严谨,比如:int var;  scanf("%d", &var); 这是正确的,但有程序员可能会粗心写为:scanf("%d", var); 把'&'忘掉了,而var的值是未知的,它映射到的地址可能是其它程序的内存空间,这样就会破坏其它程序的代码,所以编译器会警告,说什么不安全。。。

My life is brilliant
2011-07-21 11:42
爱的轩辕氏
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:157
注 册:2011-5-8
收藏
得分:0 
都不对,解决的简便方法,把scanf改成fscanf试试
。。。别的解释不多说
2011-07-21 11:57
快速回复:弱弱的问下scanf警告问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015667 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved