scanf_s的一个问题

weiqiyiji 2008-04-19 06:42:45
main() {
char c[30];
printf("Enter some characters:\n");
scanf_s("%s", c);
printf("%s\n", c);
}
我用scanf_s读取输入的字符后,没办法打印出任何东西,把scanf_s改回scanf就可以
这是为什么?
...全文
1072 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuguangzhu 2012-02-19
  • 打赏
  • 举报
回复
scanf_s("%s", c,sizeof(c));
这样就可以了 scanf_s 是scanf的安全版,检查内存边界,所以你需要提供一个边界的长度

Youngyang6 2010-05-15
  • 打赏
  • 举报
回复
你把 scanf_s("%s", c); 改成 scanf_s("%s", c,30); 这样就没问题了。。


由于scanf不安全,vc++2005/2008中提供了scanf_s(),在调用时,必须提供一个数字以表明最多读取多少位字符。 正如上面所改。
Youngyang6 2010-05-15
  • 打赏
  • 举报
回复
前面1-8楼的回答真垃圾,看问题没有啊??纯粹是为了得分进来的??这是论坛,答疑解惑的地方!晕~
我也遇到了这样的问题,楼主要是知道为什么,通知我一下啊!!谢了!!
我猜是一个bug。。谁知道呢。。
harrymwz1 2009-10-06
  • 打赏
  • 举报
回复
scanf_s更安全
meiZiNick 2008-04-30
  • 打赏
  • 举报
回复
接分是王道!
morre 2008-04-19
  • 打赏
  • 举报
回复
首先,_s 类是针对内存泄露的安全问题,所以为VS2005所推荐.
其次,注重scanf_s,wscanf_s函数后必须有数字,表示最多输入多少位(不是字节数),假如没有的话就相当于0,假如输入的字符超出范围,输出时就是空,得不到正确结果.
用户 昵称 2008-04-19
  • 打赏
  • 举报
回复
那msdn里面有没有说别的呢?可能有一些宏定义或选项得用上。
weiqiyiji 2008-04-19
  • 打赏
  • 举报
回复
我在网上搜的时候说
这是msdn里面推荐的
更安全
l999358 2008-04-19
  • 打赏
  • 举报
回复
没见过。。。。。。
scanf()
sscanf()
这我都见过,就你这个,有才!
weiqiyiji 2008-04-19
  • 打赏
  • 举报
回复
vc2005里面就建议用scanf_s
用户 昵称 2008-04-19
  • 打赏
  • 举报
回复
scanf_s?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧