C4473结构分配警告

C4473 warning for structure assignment

本文关键字:警告 分配 结构 C4473      更新时间:2023-10-16

我目前正在处理一项任务,很好奇编译时这个警告是什么以及如何纠正它。它会构建,但当我调试时,它会得到一个错误屏幕。下面是出现的警告。

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作为大小。