鱼C论坛

 找回密码
 立即注册
查看: 1753|回复: 9

[已解决]这明明只是一个输入函数啊!

[复制链接]
发表于 2019-12-13 14:52:57 | 显示全部楼层 |阅读模式

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

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

x
C6031和C4996是啥意思啊?为啥还过时了啊?
最佳答案
2019-12-13 15:41:04
你用的是vs吧
因为vs安全级别更好一些,使用scanf()函数不检查边界,出现出现内存泄露,如: char a[5]={'\0'}; scanf(“%s”,a),输入0123456789,分配5字节,读取了10字节,只读取前面一部分,后面一部分写到了其他空间;当使用scanf_s()时,需要指定读取大小,如char a[10],scanf_s("%s",a,10),规定读取空间大小。所以vs认为scanf不安全,故要求使用scanf_s等

解决方案
方法一:在程序最前面加#define _CRT_SECURE_NO_DEPRECATE;
方法二:在程序最前面加#define _CRT_SECURE_NO_WARNINGS;
方法三:在程序最前面加#pragma warning(disable:4996);
方法四:把scanf改为scanf_s;.
方法五:无需在程序最前面加那行代码,只需在新建项目时取消勾选“SDL检查”即可;
方法六:若项目已建立好,在项目属性里关闭SDL也行;
方法七:在工程项目设置一下就行;将报错那个宏定义放到 项目属性 -- C/C++-- 预处理器 -- 预处理器定义;
方法八:在 项目属性 -- c/c++ -- 命令行 添加:/D _CRT_SECURE_NO_WARNINGS 就行了。
QQ图片20191213145006.png
QQ图片20191213145035.png
QQ图片20191213145242.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-13 15:41:04 | 显示全部楼层    本楼为最佳答案   
你用的是vs吧
因为vs安全级别更好一些,使用scanf()函数不检查边界,出现出现内存泄露,如: char a[5]={'\0'}; scanf(“%s”,a),输入0123456789,分配5字节,读取了10字节,只读取前面一部分,后面一部分写到了其他空间;当使用scanf_s()时,需要指定读取大小,如char a[10],scanf_s("%s",a,10),规定读取空间大小。所以vs认为scanf不安全,故要求使用scanf_s等

解决方案
方法一:在程序最前面加#define _CRT_SECURE_NO_DEPRECATE;
方法二:在程序最前面加#define _CRT_SECURE_NO_WARNINGS;
方法三:在程序最前面加#pragma warning(disable:4996);
方法四:把scanf改为scanf_s;.
方法五:无需在程序最前面加那行代码,只需在新建项目时取消勾选“SDL检查”即可;
方法六:若项目已建立好,在项目属性里关闭SDL也行;
方法七:在工程项目设置一下就行;将报错那个宏定义放到 项目属性 -- C/C++-- 预处理器 -- 预处理器定义;
方法八:在 项目属性 -- c/c++ -- 命令行 添加:/D _CRT_SECURE_NO_WARNINGS 就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-14 18:24:18 | 显示全部楼层
910201513 发表于 2019-12-13 15:41
你用的是vs吧
因为vs安全级别更好一些,使用scanf()函数不检查边界,出现出现内存泄露,如: char a[5]={' ...

#include<stdio.h>
long hanshu(int n);
int main()
{
        int n;
        int result;
        scanf_s("%d", &n);
        result = hanshu(n);
        printf("%d", result);
}
int hanshu(int n)
{
        int linshijieguo;
        if (n == 0 || n == 1)
        {
                linshijieguo = 1;
        }
        else if (n < 0)
        {                printf("n<0,input error!\n");
}
        else
        {
                linshijieguo = hanshu(n - 1)*n;
        }
}求大神为什么求不出正确的值;
用的vs2013

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-15 13:34:35 | 显示全部楼层
本帖最后由 910201513 于 2019-12-15 13:37 编辑
WFR 发表于 2019-12-14 18:24
#include
long hanshu(int n);
int main()


第一个问题:子函数声明和子函数定义的返回值结果不同
第二个问题:scanf_s的格式没写对
第三个问题:子函数没有返回值所以hanshu(n)不是你想要的值

修改后代码为
#include<stdio.h>
int hanshu(int n);
int main()
{
    int n;
    int result;
    scanf("%d", &n);
    result = hanshu(n);
    printf("%d", result);
}
int hanshu(int n)
{
    int linshijieguo;
    if (n == 0 || n == 1)
    {
        linshijieguo = 1;
    }
    else if (n < 0)
    {
        printf("n<0,input error!\n");
    }
    else
    {
        linshijieguo = hanshu(n - 1)*n;
    }
    return linshijieguo;
}
如果还有疑问,欢迎跟贴
也可加本人QQ讨论
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-15 20:05:47 | 显示全部楼层
910201513 发表于 2019-12-15 13:34
第一个问题:子函数声明和子函数定义的返回值结果不同
第二个问题:scanf_s的格式没写对
第三个问题 ...

输入20得到的就不是正确的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-15 20:09:01 | 显示全部楼层
WFR 发表于 2019-12-15 20:05
输入20得到的就不是正确的结果

怎么就对了???求解!!!
新手!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-16 17:45:00 | 显示全部楼层
本帖最后由 910201513 于 2019-12-16 17:46 编辑
WFR 发表于 2019-12-15 20:09
怎么就对了???求解!!!
新手!!!


你这难道不是求阶乘吗?
20的阶乘超出了int的范围当然是错误的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-21 18:21:01 | 显示全部楼层
910201513 发表于 2019-12-16 17:45
你这难道不是求阶乘吗?
20的阶乘超出了int的范围当然是错误的

该怎么解决呢???、


、、





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-22 14:11:49 | 显示全部楼层
WFR 发表于 2019-12-21 18:21
该怎么解决呢???、

使用 unsigned long long 类型绝对的够了
有64位精度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-26 20:47:01 | 显示全部楼层
910201513 发表于 2019-12-22 14:11
使用 unsigned long long 类型绝对的够了
有64位精度

还可以这样???我还以为最长的就是long型呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 05:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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