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()输入函数,所以用户应当输入两次,实现两次交互效果,请看下面调试输出图:,

正常情况应该如下:

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

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

解决方案:


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

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

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

像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
————————————————
版权声明:本文为CSDN博主「你挡我发光了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_51520483/article/details/123965668

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值