0


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


本文转载自: https://blog.csdn.net/weixin_51520483/article/details/123965668
版权归原作者 你挡我发光了 所有, 如有侵权,请联系我们删除。

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

还没有评论