C4473结构分配警告

Chr*_*ris 0 c++ structure scanf

我目前正在完成一项任务,很好奇编译时这个警告是什么以及如何解决它.它将构建,但是当我调试它将得到一个错误屏幕.以下是出现的警告.

1> c:\ users\cesteves\documents\c programming\inventory\inventory\inventory.cpp(48):警告C4473:'scanf_s':没有为格式字符串传递足够的参数

注意:占位符及其参数需要2个可变参数,但提供了1个

注意:格式字符串'%s'需要缺少的可变参数2注意:此参数用作缓冲区大小

#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");
}
Run Code Online (Sandbox Code Playgroud)

gsa*_*ras 5

您应该提供缓冲区的大小.例如,如果您只读取一个char,它应该是这样的:

char c;
scanf_s("%c", &c, 1);
Run Code Online (Sandbox Code Playgroud)

请阅读参考!

此外,structs很高兴被放置在之前main().关于基本用法,我总是记住我的榜样structs.

main的原型应该int main(void)在你的情况下.检查一下:int中的main()vs void main()


在您的代码中,更改此:

scanf_s("%s", item[i].name);
Run Code Online (Sandbox Code Playgroud)

对此:

scanf_s("%s", item[i].name, 20);
Run Code Online (Sandbox Code Playgroud)

因为这:

struct details {
  char name[20];
  ..  
Run Code Online (Sandbox Code Playgroud)

其余的做同样的事情..