C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”

这篇具有很好参考价值的文章主要介绍了C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

学习过程遇见的问题,出现两个警告,一个是关于C6054:可能没有为字符串“name”添加字符串零终警告,另一个是关于C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”,因为篇幅太长,本片只介绍C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”,警告C6054请移

警告C6054


问题描述

// talkback.c -- 演示与用户交互
#include <stdio.h>
#include <string.h> // 提供strlen()函数的原型
#define DENSITY 62.4 // 人体密度(单位:磅/立方英尺)
int main()
{
	float weight, volume;
	int size, letters;
	char name[40] = {0}; /* 声明字符串name, name是一个可容纳40个字符的数组 */
	printf("Hi! What's your first name?\n");
	scanf_s("%s", name);
	printf("%s, what's your weight in pounds?\n", name);
	scanf_s("%f", &weight);
	size = sizeof name;
	letters = strlen(name); /* strlen()函数的使用 */
	volume = weight / DENSITY;
	printf("Well, %s, your volume is %2.2f cubic feet.\n", name, volume);
	printf("Also, your first name has %d letters,\n", letters);
	printf("and we have %d bytes to store it.\n", size);
	return 0;
}

以上是源代码,大家可以试着运行,我调试并没有报错,并也出现了弹窗,但运行的结果视乎纯在问题,判断不正常情况理由。程序目的是实现与用户的交互,代码中使用两次scanf_s()输入函数,所以用户应当输入两次,实现两次交互效果,请看下面调试输出图:,

C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”

正常情况应该如下:

C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”

所以还一部内容哪去了???关闭弹窗,编译出现警告

C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”


原因分析:

//scanf_s("%s", name);    对于变量name这个字符串,没有传入字符串长度的参数,因为在调用scanf_s()函数时,如果必须提供一个数字以表明最多读取多少位字符。比如:char d[20];写成scanf_s("%s",d,20);才是正确的,有这个参数20使准确性、安全性提高。


解决方案:

C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”

 修改完后,运行结果如下图:

C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”

-------------------------------------分------------割-----------线---------------------------------------------------------

补充内容:在有些时候并不需要传入字符串长度的参数

像scanf_s()函数要求输入的类型是%c(单个字符)、要求输入的类型是%d(十进制整数)、要求输入的类型为%f(浮点型).....等等。换句话,只有当函数要求传入的类型是%s(字符串)时,才要需要传入字符串长度的参数

像下面的这段代码:

#include <stdio.h>
int main(void) /* 函数原型,主函数 */
{
	char zifu; /* 声明字符类型变量名为zifu */
	printf("请输入你想输入的字符:");
	scanf_s("%c", &zifu); 
	printf("你输入的字符是: %c,它的代码编号是:%d", zifu, zifu); /* ①打印字符②打印十进制整数 */
	return 0;
}

到此,问题已经解决,欢迎在评论区交流,若有不对地方,请指正,共勉

另外,如果分不清scanf()和scanf_s(),请看链接,博主也有些地方引用其中内容

http://t.csdn.cn/3JxhK文章来源地址https://www.toymoban.com/news/detail-505825.html

到了这里,关于C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包