miaozailuo 发表于 2020-10-28 16:52:31

小白求助

#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:58:17

本帖最后由 xieglt 于 2020-10-28 16:59 编辑

scanf_s("%s", name);
改成
scanf_s("%s", name,sizeof(name));

miaozailuo 发表于 2020-10-28 17:02:49

没用,显示的是错误

xieglt 发表于 2020-10-28 17:10:11

miaozailuo 发表于 2020-10-28 17:02
没用,显示的是错误

尝试一下把name 初始化
char name = {0};

风过无痕1989 发表于 2020-10-28 17:51:31

这是你对 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]
查看完整版本: 小白求助