学习C碰到的问题02:C6064 缺少“scanf_s”的整型参数(对应于转换说明符“2”)

  • Post author:
  • Post category:其他


开发环境:

系统:windows10 X64 专业版

IDE:Microsoft Visual Studio 2022 community

语言:C

源代码如下:

/* praise1.c -- 使用不同类型的字符串 */
#include <stdio.h>
#include <string.h>

#define _CRT_SECURE_NO_WARNINGS
#define PRAISE "You are an extraordinary being."

int main(void)
{
	char name[40];
	printf("What's your name? ");
	scanf_s("%s",name); // 使用scanf_s输入字符串,必须加字符串的长度
	printf("Hello, %s.%s\n", name, PRAISE);
	printf("%d\n", strlen(name));
	return 0;
}

运行时输入参数就会卡住报错。

报错内容

然后停止后出现如下警告:


C6064 缺少“scanf_s”的整型参数(对应于转换说明符“2”)


C6054    可能没有为字符串“name”添加字符串零终止符。


C6328    大小不匹配: 已将“unsigned __int64”作为 _Param_(2) 传递,但需要使用“int”来调用“printf”。


原因:scanf_s()的变量是字符串时需要加入字符串长度


修改后代码如下:

#include <stdio.h>
#include <string.h>

#define _CRT_SECURE_NO_WARNINGS
#define PRAISE "You are an extraordinary being."

int main(void)
{
	char name[40];
	printf("What's your name? ");
	scanf_s("%s",name,40); // 使用scanf_s输入字符串,必须加字符串的长度
	printf("Hello, %s.%s\n", name, PRAISE);
	printf("%d\n", strlen(name));
	return 0;
}

这样就可以正常运行了。


感谢大佬 “你挡我发光了” 的分享



版权声明:本文为qq_40365533原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。