是否有一种方法可以默认设置所有项目,删除使用scanf()等函数时出现的预编译器安全警告.我发现你可以通过在项目选项中添加一行或#define _CRT_SECURE_NO_WARNINGS在代码的开头添加一行来实现.
我发现自己一再创建解决编程竞赛的新项目,并且真的很烦人(并且花费宝贵的时间)来添加:
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
Run Code Online (Sandbox Code Playgroud)
在代码的开头,或者每次我开始一个新项目时在预编译器选项中设置它.
我在我的简单MFC窗口应用程序中编译错误,该应用程序由向导生成,包含几行代码:
错误C4996:'strncpy':此函数或变量可能不安全.请考虑使用strncpy_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.
我设置 Configuration Properties>>C/C++>>Preporocessor>>Preprocessor Definitions>> _CRT_NONSTDC_NO_WARNINGS
但这没有帮助.我有另一个非常接近的项目,在这个地方只生成警告,它没有_CRT_NONSTDC_NO_WARNINGS定义.
只有项目之间的差异是向导中的几个不同选项.
为什么_CRT_NONSTDC_NO_WARNINGS对第一个项目没有帮助,为什么第二个项目在没有这个定义的情况下编译没有问题?
我将我的项目从Visual Studio 2012移植到2013,并且sqlite.c将无法在其中编译.我收到这个编译时错误:
error C4996: 'GetVersionExA': was declared deprecated
error C4996: 'GetVersionExW' was declared deprecated
Run Code Online (Sandbox Code Playgroud)
我得到了最新版本的sqlite以确保它没有被占用,但它没有.我不知道该怎么办这个错误.我没有修改源代码; 我只是创建一个项目,包括sqlite.h和sqlite.c.谢谢.
我创建了一个小应用程序,通过使用带参数的用户定义函数来查找最大数量.当我运行它时,它会显示此消息
错误1错误C4996:'scanf':此函数或变量可能不安全.请考虑使用scanf_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.
我该怎么做才能解决这个问题?
这是我的代码
#include<stdio.h>
void findtwonumber(void);
void findthreenumber(void);
int main() {
int n;
printf("Fine Maximum of two number\n");
printf("Fine Maximum of three number\n");
printf("Choose one:");
scanf("%d", &n);
if (n == 1)
{
findtwonumber();
}
else if (n == 2)
{
findthreenumber();
}
return 0;
}
void findtwonumber(void)
{
int a, b, max;
printf("Enter a:");
scanf("%d", &a);
printf("Enter b:");
scanf("%d", &b);
if (a>b)
max = a;
else
max = b;
printf("The max is=%d", max);
}
void findthreenumber(void)
{
int a, …Run Code Online (Sandbox Code Playgroud) 在警告级别4(/ W4)编译代码时,我在参数为C数组的调用(而不是像向量的STL容器)上收到C4996警告std::copy().修复此问题的推荐解决方案似乎是使用stdext :: checked_array_iterator.
有什么用的stdext :: checked_array_iterator?它是如何工作的?
为什么它不会对在Visual C++ 2010下编译的这段错误代码发出任何编译警告?:
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
int arr0[5] = {100, 99, 98, 97, 96};
int arr1[3];
copy( arr0, arr0 + 5, stdext::checked_array_iterator<int*>( arr1, 3 ) );
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个机器人来访问 BitStamp API ( https://www.bitstamp.net/api/ ) 并执行操作,但我遇到了障碍。
在链接的页面中,他们展示了如何使用 c++(V2 版本)进行身份验证的示例。我在使用 openSSL 进行身份验证时遇到这部分问题:
HMAC_CTX ctx;
HMAC_CTX_init(&ctx);
HMAC_Init_ex(&ctx, api_secret.c_str(), api_secret.length(), EVP_sha256(), NULL);
HMAC_Update(&ctx, (unsigned char*)data_to_sign.c_str(), data_to_sign.length());
HMAC_Final(&ctx, result, &len);
HMAC_CTX_cleanup(&ctx);
std::string x_auth_signature = b2a_hex( (char *)result, 32 );
free(result);
Run Code Online (Sandbox Code Playgroud)
和
std::string b2a_hex(char *byte_arr, int n)
{
const static std::string hex_codes = "0123456789abcdef";
std::string hex_string;
for ( int i = 0; i < n ; ++i ) {
unsigned char bin_value = byte_arr[i];
hex_string += hex_codes[( bin_value >> 4 ) & 0x0F];
hex_string …Run Code Online (Sandbox Code Playgroud)