C4473结构分配警告
C4473 warning for structure assignment
我目前正在处理一项任务,很好奇编译时这个警告是什么以及如何纠正它。它会构建,但当我调试时,它会得到一个错误屏幕。下面是出现的警告。
1> c:\users\cesteves\documents\cprogramming\inventory\inventoory\cpp(48):警告C4473:"scanf_s":为格式字符串传递的参数不足
注意:占位符及其参数需要2个可变参数,但提供了1个
注意:格式字符串需要缺少变参数2"%s"注意:此参数用作缓冲区大小
#include "stdafx.h"
#include <stdio.h>
void main()
{
struct date {
int day;
int month;
int year;
};
struct details {
char name[20];
int price;
int code;
int qty;
struct date mfg;
};
struct details item[50];
int n, i;
printf("Enter number of items:");
scanf_s("%d", &n);
for (i = 0; i < n; i++) {
printf("Item name: n");
scanf_s("%s", item[i].name);
printf("Item code: n");
scanf_s("%d", &item[i].code);
printf("Quantity: n");
scanf_s("%d", &item[i].qty);
printf("price: n");
scanf_s("%d", &item[i].price);
printf("Manufacturing date(dd-mm-yyyy): n");
scanf_s("%d-%d-%d", &item[i].mfg.day, &item[i].mfg.month, &item[i].mfg.year);
}
printf(" ***** INVENTORY ***** n");
printf("----------------------------------------------------------------- - n");
printf("S.N.| NAME | CODE | QUANTITY | PRICE| MFG.DATE n");
printf("----------------------------------------------------------------- - n");
for (i = 0; i < n; i++)
printf("%d %-15s %-d %-5d %-5d%d / %d / %d n", i + 1, item[i].name, item[i].code, item[i].qty,item[i].price, item[i].mfg.day, item[i].mfg.month,item[i].mfg.year);
printf("----------------------------------------------------------------- - n");
}
您应该提供缓冲区的大小。例如,如果你只读取一个字符,它应该是这样的:
char c;
scanf_s("%c", &c, 1);
请阅读参考资料!
此外,structs
被放置在main()
之前是很好的。关于structs
的基本用法,我一直有自己的榜样。
在您的情况下,main的原型应该是int main(void)
。检查以下内容:C 中的int main()与void main()
在您的代码中,更改此:
scanf_s("%s", item[i].name);
到此:
scanf_s("%s", item[i].name, 20);
正因为如此:
struct details {
char name[20];
..
对其余部分执行相同操作。
scanf_s("%s", item[i].name);
scanf_s
需要的大小作为具有说明符%s
、%c
和%[
的第三个参数。
你需要这样写-
scanf_s("%s", item[i].name,20);
类似地,对于输入,单个字符通过1
作为大小。
相关文章:
- 警告处理为错误这里有什么问题
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- cppcheck在const std::string[]上引发警告
- C++ 警告:将新创建的 gsl::owner<> 分配给非所有者
- clang++ 8.0.1 自分配重载警告
- 获取“将返回值分配给新变量”的警告和输出是内存地址
- 为什么分配可能会丢失数据,而不是产生编译器警告
- 为什么GCC警告使用STD ::元组和虚拟继承来调用非平凡的动作分配运算符
- 当动态分配内存时警告
- 而 (p=strtok(NULL, "," )) 警告:p可识别的错误分配
- 为什么Visual Studio在自我分配时不触发警告(int foo = foo;)
- 处理分配更改回调中的警告
- 警告:X的默认移动分配运算符将多次移动分配虚拟基类Y
- C4473结构分配警告
- 为什么 g++ 或 clang 在通过将非常量变量分配给较小类型的变量来截断非常量变量时不引发警告