鱼C论坛

 找回密码
 立即注册
查看: 1204|回复: 1

[已解决]visual studio里面的scanf总提示警告

[复制链接]
发表于 2023-4-25 00:42:26 | 显示全部楼层 |阅读模式

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

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

x
        Node * head = NULL;
        char szBookName[50];
        float fBookprice;
        int nBookNumber;
        printf("请输入书名:");
        scanf("%s", szBookName);
        printf("请输入定价:");
        scanf("%f", &fBookprice);
        printf("请输入书号:");
        scanf("%d", &nBookNumber);
        head = AppendNode(head, szBookName, nBookNumber, fBookprice);
                return 0;


这段代码里面的scanf 总提示警告.. 改成scanf_s之后  scanf("%50s", szBookName);  这个出现警告
预处理器定义 里面也加入了_CRT_SECURE_NO_WARNINGS,,,_CRT_SECURE_NO_WARNINGS_GLOBALS    可是还是提示警告
最佳答案
2023-4-25 00:46:11
如果您使用的是Visual Studio,它会强烈建议您使用更安全的版本的函数,例如`scanf_s`,以防止潜在的安全问题。在这里,我们首先需要使用`scanf_s`替换`scanf`,然后需要确保您正确地使用它们。对于`scanf_s`,您需要为每个读取的字符串参数指定一个长度。下面是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 如果需要,也可以添加其他库

// 假设这里是您的 AppendNode 函数定义
// ...

int main() {
    Node *head = NULL;
    char szBookName[50];
    float fBookprice;
    int nBookNumber;

    printf("请输入书名:");
    scanf_s("%49s", szBookName, _countof(szBookName)); // 使用scanf_s并提供缓冲区大小
    printf("请输入定价:");
    scanf_s("%f", &fBookprice);
    printf("请输入书号:");
    scanf_s("%d", &nBookNumber);

    head = AppendNode(head, szBookName, nBookNumber, fBookprice);

    return 0;
}

注意:在`scanf_s`中,我们使用了`%49s`,因为我们希望为字符串留出一个额外的字符,以便存储结束符(`\0`)。另外,我们使用了`_countof(szBookName)`来获取数组长度。

通过这些修改,您的警告应该已经解决。如果您仍然遇到警告,请确保将"_CRT_SECURE_NO_WARNINGS"预处理器定义添加到您的项目中。在Visual Studio中,可以按以下步骤操作:

1. 右键单击项目名称,然后选择"属性"。
2. 在"属性"窗口中,展开"C/C++"选项卡,然后单击"预处理器"。
3. 在"预处理器定义"中,添加"_CRT_SECURE_NO_WARNINGS",确保与其他定义用分号分隔。
4. 点击"应用",然后点击"确定"。

现在,您的代码应该不再显示警告。如果您仍然遇到问题,请随时提问,以便我们能够为您提供更多帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-25 00:46:11 | 显示全部楼层    本楼为最佳答案   
如果您使用的是Visual Studio,它会强烈建议您使用更安全的版本的函数,例如`scanf_s`,以防止潜在的安全问题。在这里,我们首先需要使用`scanf_s`替换`scanf`,然后需要确保您正确地使用它们。对于`scanf_s`,您需要为每个读取的字符串参数指定一个长度。下面是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 如果需要,也可以添加其他库

// 假设这里是您的 AppendNode 函数定义
// ...

int main() {
    Node *head = NULL;
    char szBookName[50];
    float fBookprice;
    int nBookNumber;

    printf("请输入书名:");
    scanf_s("%49s", szBookName, _countof(szBookName)); // 使用scanf_s并提供缓冲区大小
    printf("请输入定价:");
    scanf_s("%f", &fBookprice);
    printf("请输入书号:");
    scanf_s("%d", &nBookNumber);

    head = AppendNode(head, szBookName, nBookNumber, fBookprice);

    return 0;
}

注意:在`scanf_s`中,我们使用了`%49s`,因为我们希望为字符串留出一个额外的字符,以便存储结束符(`\0`)。另外,我们使用了`_countof(szBookName)`来获取数组长度。

通过这些修改,您的警告应该已经解决。如果您仍然遇到警告,请确保将"_CRT_SECURE_NO_WARNINGS"预处理器定义添加到您的项目中。在Visual Studio中,可以按以下步骤操作:

1. 右键单击项目名称,然后选择"属性"。
2. 在"属性"窗口中,展开"C/C++"选项卡,然后单击"预处理器"。
3. 在"预处理器定义"中,添加"_CRT_SECURE_NO_WARNINGS",确保与其他定义用分号分隔。
4. 点击"应用",然后点击"确定"。

现在,您的代码应该不再显示警告。如果您仍然遇到问题,请随时提问,以便我们能够为您提供更多帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 15:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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