小白求助
#include<stdio.h>#include<string.h>
#define DENSITY 62.4
int main(void)
{
float weight, volume;
int size, letters;
char name;
printf("Hi!What's your first name?\n");
scanf_s("%s", name);
printf("%s,what's your weight in pounds?\n", name);
scanf_s("%f", &weight);
size = sizeof(name);
letters = strlen(name);
volume = weight / DENSITY;
printf("Well,%s,your volume is %2.2f cubic feet.\n", name, volume);
printf("Also,your first name has %d letters,\n", letters);
printf("and we have %d bytes to storenit.\n", size);
return 0;
} 在vs2019上显示缺少“scanf_s”的整型参数(对应于转换说明符“2”) 和可能没有为字符串“name”添加字符串零终止符,请问怎么修改?
本帖最后由 xieglt 于 2020-10-28 16:59 编辑
scanf_s("%s", name);
改成
scanf_s("%s", name,sizeof(name)); 没用,显示的是错误 miaozailuo 发表于 2020-10-28 17:02
没用,显示的是错误
尝试一下把name 初始化
char name = {0}; 这是你对 scanf_s() 理解不够,它与 scanf() 是有区别的:
scanf() 函数 :
scanf() 函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
其调用格式为:scanf("<格式化字符串>",<地址表>)。
scanf_s()函数:
scanf_s() 的功能虽然与scanf() 相同,但却比 scanf() 安全,因为 scanf_s() 是针对“ scanf()在读取字符串时不检查边界,可能会造成内存泄露”这个问题设计的。
scanf_s()用于读取字符串时,必须提供一个数字以表明最多读取多少位字符,以防止溢出。
写作格式就是:scanf_s(控制符,地址列表,最多字节),例如: scanf_s("%c",&name,20)
所以,你将你的程序中的两个 scanf_s() 后面添加一个边界值,程序就没有问题了
页:
[1]