项目场景:
学习过程遇见的问题,出现两个警告,一个是关于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(),请看链接,博主也有些地方引用其中内容文章来源:https://www.toymoban.com/news/detail-505825.html
http://t.csdn.cn/3JxhK文章来源地址https://www.toymoban.com/news/detail-505825.html
到了这里,关于C6064:缺少“scanf_s”的整型参数(对应于转换说明符“2”的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!