码迷,mamicode.com
首页 > 编程语言 > 详细

在C语言中使用scanf语句时遇到的问题总结

时间:2015-01-18 22:30:02      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

    在使用visual studio2013编写c语言代码时,遇到了这样的几个小问题,进行如下的总结。

1, 关于使用scanf语句报错的解决方案1

#include <stdio.h>
int main(void)
{
    char ch;

    printf("Please enter a character.\n");
    scanf("%c", &ch);   
    printf("The code for %c is %d.\n", ch, ch);

    return 0;
}

    如上所示的代码,之前在其他的编译平台,就可以正常的运行,例如运行时,你输入字母c,便会打印出The code for c is 67.但是在visual studio2013中运行会提示如下所示的错误:

error 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为scanf_s,再次运行,发现不再提示编译错误。仔细分析一下原因:

    其实从官网文档中可以得知,出现这种问题,只是因为这是新版vc库添加的警告,微软认为scanf的使用存在安全隐患,因为C/C++中的字符串处理都是以\0为截止符的,如果搜索不到\0,容易出现字符串越界所有vc扩展的所谓安全标准库,都添加了一个参数用以指定字符串参数的长度,用以避免这种安全隐患。其实要避免出现这种问题,解决方法很简单,鼠标单击“项目文件”,按下Alt+Enter,显示如下界面,

技术分享

    点击c/c++,预处理器选项,选择右侧的预处理器定义,并选择编辑并在编辑框中添加一行内容_CRT_SECURE_NO_DEPRECATE就OK了。按下ctrl+F5运行程序不在报错,程序运行正常,

技术分享

2.按照系统提示,更改scanf为scanf_s

    如果,我们按照系统提示更改为scanf_s,我们运行程序,系统不再报错,但是程序运行时,我们同样输入输入C,查看结果如下所示,

技术分享

    那么问题又来了,无论我们我们输入什么字符,系统输出结果总是The code for     is  0.只有是为什么呢,我们查看官方关于这个问题的解答(链接地址http://msdn.microsoft.com/en-us/library/w40768et.aspx),

a single character may be read as follows:

<P>char c;
<P>scanf_s("%c", &amp;c, 1);</P>

 

When multiple characters for non-null terminated strings are read, integers are used as the width specification and the buffer size.

<P>char c[4];
<P>scanf_s("%4c", &amp;c, _countof(c)); // not null terminated</P>

    原来是因为scanf_s在使用该功能是,有新的规定,必须在最后面声明要读取的字符串的长度,我们按照MSDN上面的备注,更改程序如下:

#include <stdio.h>
int main(void)
{
    char ch;

    printf("Please enter a character.\n");
    scanf_s("%c", &ch,1);   //从键盘读取一个字符
    printf("The code for %c is %d.\n", ch, ch);

    return 0;
}

    再次运行程序,输出结果如下:

技术分享

总结:很多时候,官方文档是最权威的参考资料,作为一个开发者,学会高效的使用官方文档是尤为重要的。

在C语言中使用scanf语句时遇到的问题总结

标签:

原文地址:http://www.cnblogs.com/xulan-2015/p/4232343.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!