q865782333 发表于 2023-4-25 00:42:26

visual studio里面的scanf总提示警告

        Node * head = NULL;
        char szBookName;
        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    可是还是提示警告

isdkz 发表于 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;
    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. 点击"应用",然后点击"确定"。

现在,您的代码应该不再显示警告。如果您仍然遇到问题,请随时提问,以便我们能够为您提供更多帮助。
页: [1]
查看完整版本: visual studio里面的scanf总提示警告