博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在C语言中使用scanf语句时遇到的问题总结
阅读量:5087 次
发布时间:2019-06-13

本文共 1696 字,大约阅读时间需要 5 分钟。

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

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

#include 
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.只有是为什么呢,我们查看官方关于这个问题的解答(链接地址),

a single character may be read as follows:

char c;

scanf_s("%c", &c, 1);

 

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

char c[4];

scanf_s("%4c", &c, _countof(c)); // not null terminated

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

#include 
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;}

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

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

转载于:https://www.cnblogs.com/xulan-2015/p/4232343.html

你可能感兴趣的文章
数据分析处理库Pandas——概述
查看>>
博客园代码黑色高亮背景设置
查看>>
ignorable tips
查看>>
Eclipse 在ubuntu桌面显示快捷启动以及解决Eclipse 在ubuntu中点击菜单栏不起作用的原因....
查看>>
Python学习 Day18 Python 3层架构
查看>>
typedef用法
查看>>
ehlib ado 删除选中记录 的方法
查看>>
日期 时间选择器(DatePicker和TimePicker)实现用户选择
查看>>
AdapterViewFlipper功能 自动播放的图片库
查看>>
leetcode 28 Implement Strstr()
查看>>
asp.net 下OnClientClick的妙用
查看>>
实现最大索引堆
查看>>
Java equals和hashcode 的区别
查看>>
Redis 笔记与总结1 安装部署
查看>>
Web前端面试题集锦
查看>>
Android 通过AIDL在两个APP之间Service通信
查看>>
关于笔试题输入输出的小问题
查看>>
HTTP 错误 404.2 - Not Found
查看>>
对象指针:
查看>>
mako的模板继承语法
查看>>