#include <stdio.h>

#define _CRT_SECURE_NO_WARNINGS

...

int num = 12345;

char numStr[20];
sprintf(numStr, "%d", num);
  1. 在 C 语言开发中,上述代码使用了 #define _CRT_SECURE_NO_WARNINGS 来禁用安全警告,以使用 sprintf 函数

  2. 但是,#define _CRT_SECURE_NO_WARNINGS 不生效,输出结果仍然是

C4996
'sprintf': This function or variable may be unsafe. 
Consider using sprintf_s instead. 
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. 
See online help for details.
问题原因
  • 标准库内部会检查 _CRT_SECURE_NO_WARNINGS 宏定义,如果在 #include 标准库之后,编译器已经读取了警告逻辑,导致宏失效
处理策略
  1. #define _CRT_SECURE_NO_WARNINGS 放在所有 #include 标准库之前
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

...

int num = 12345;

char numStr[20];
sprintf(numStr, "%d", num);
  1. 或者,使用更加安全的函数替代 sprintf 函数,例如 snprintf 函数或 sprintf_s 函数,避免禁用安全警告

更多推荐