鱼C论坛

 找回密码
 立即注册
查看: 1572|回复: 4

[已解决]小白求助

[复制链接]
发表于 2020-10-28 16:52:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<string.h>
#define DENSITY 62.4
int main(void)
{
        float weight, volume;
        int size, letters;
        char name[40];

        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”添加字符串零终止符,请问怎么修改?
最佳答案
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() 后面添加一个边界值,程序就没有问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-28 16:58:17 | 显示全部楼层
本帖最后由 xieglt 于 2020-10-28 16:59 编辑

scanf_s("%s", name);
改成
scanf_s("%s", name,sizeof(name));
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-28 17:02:49 | 显示全部楼层
没用,显示的是错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-28 17:10:11 | 显示全部楼层
miaozailuo 发表于 2020-10-28 17:02
没用,显示的是错误

尝试一下把name 初始化
char name[40] = {0};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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() 后面添加一个边界值,程序就没有问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 18:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表