scanf("%s", file_name);严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 实验5 C:\Users\Mosquito\source\repos\实验5\实验5\main.cpp 32 如何修改报错代码
时间: 2023-11-15 21:05:57 浏览: 125
这个错误同样是因为使用了不安全的函数 `scanf`,建议使用更安全的函数 `scanf_s`。你可以将 `scanf` 替换为 `scanf_s` 并按照 `scanf_s` 函数的参数列表进行修改。
下面是如何将 `scanf` 替换为 `scanf_s` 的步骤:
1. 将 `scanf` 的第一个参数 `%s` 修改为 `%s`,即将 `scanf("%s", file_name);` 修改为 `scanf_s("%s", file_name, sizeof(file_name));`。
2. 将 `scanf` 的第二个参数 `file_name` 修改为变量的大小,即将 `scanf("%s", file_name);` 修改为 `scanf_s("%s", file_name, sizeof(file_name));`。
需要注意的是,`scanf_s` 的第三个参数是变量的大小,要使用 `sizeof` 运算符获取变量的大小。
相关问题
scanf_s("%s", file_name,sizeof(file_name));严重性 代码 说明 项目 文件 行 禁止显示状态 警告 C4473 “scanf_s”: 没有为格式字符串传递足够的参数 实验5 C:\Users\Mosquito\source\repos\实验5\实验5\main.cpp 32 请修改代码
修改代码可以如下:
```c++
scanf_s("%s", file_name, sizeof(file_name)/sizeof(file_name[0]));
```
警告信息提示你在使用scanf_s函数时,格式字符串中传递的参数数量不足。需要传递格式字符串、待输入数据的变量、以及待输入数据的缓冲区大小三个参数。
在本例中,第三个参数应该是缓冲区的大小,而不是字符数组的大小。因此,我们需要使用`sizeof(file_name)/sizeof(file_name[0])`来计算缓冲区大小,即字符数组所占的字节数除以一个字符所占的字节数。
scanf_s("%s", file_name, sizeof(file_name) / sizeof(file_name[0]));严重性 代码 说明 项目 文件 行 禁止显示状态 警告 C4477 “scanf_s”: 格式字符串“%s”需要类型“unsigned int”的参数,但可变参数 2 拥有了类型“unsigned __int64” 实验5 C:\Users\Mosquito\source\repos\实验5\实验5\main.cpp 32
这个警告信息提示你在使用scanf_s函数时,格式字符串中的%s需要传递一个unsigned int类型的参数,但是可变参数2传递了一个unsigned __int64类型的参数,两者类型不匹配,可能导致错误。
解决方法可以将`sizeof(file_name) / sizeof(file_name[0])`强制转换为unsigned int类型,代码如下:
```c++
scanf_s("%s", file_name, (unsigned int)(sizeof(file_name) / sizeof(file_name[0])));
```
这样就可以消除警告信息。
阅读全文