【问题标题】:scanf_s not enough arguments passed for format string(Visual Studio)scanf_s 为格式字符串传递的参数不足(Visual Studio)
【发布时间】:2016-05-06 04:40:40
【问题描述】:

程序显示错误为标题。 scanf_s 函数有什么问题? 任何的想法?提前致谢。

int main()
    {
        struct Students
        {
            char name[10];
            int  snum;
            float  point;
        }st[5];

int i;
for(i=0;i<5;i++)
{
    printf("-- Student Info --\n-");

    printf("Enter Your Name: ");
    scanf_s("%s",st[i].name);

    printf("\nEnter Your Number: ");
    scanf_s("%d",&st[i].snum);
}

return 0;
}

【问题讨论】:

  • %s of fscanf_s 需要缓冲区大小。例如scanf_s("%s", st[i].name, sizeof(st[i].name));
  • 哦,很好用,你能解释一下为什么我需要添加缓冲区大小吗?
  • 添加标签visual studio
  • 检查输入是否超过缓冲区大小。查看之前评论的链接。
  • 您是否阅读了来自 scanf_s 的文档,并且您了解是什么使它安全/可靠吗?

标签: c string visual-studio scanf tr24731


【解决方案1】:

当编译器检测到满足格式字符串中占位符所需的参数数量与提供的参数数量不匹配时,通常会出现这种类型的错误。

这是 Visual Studio 2015 及更高版本中提供的新警告。 因此,要使您的代码正常工作,您需要提供两个参数,一个是地址,第二个是额外的 sizeof(variable) 占位符。

scanf_s("%s", &string, sizeof(string));

这将使代码正常工作。

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 2013-10-27
    • 1970-01-01
    • 2020-04-10
    • 2020-04-12
    • 2012-06-24
    • 2020-10-17
    • 2015-10-16
    相关资源
    最近更新 更多