VS2015套接字编程时error C4996错误处理

来源:互联网 发布:知乎 东风 编辑:程序博客网 时间:2024/05/21 17:29

1 问题引入

VS2015中进行套接字编程时,

struct sockaddr_in ClientAddr;

ClientAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

在编译时会弹出 

error C4996: 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings错误提示。主要原因是inet_addr()函数已经过时,推荐使用inet_pton()或者InetPton()函数。

2 问题解决

可以采用三种方法解决error C4996错误:第一种是关闭项目的SDL检查;第二种是对_WINSOCK_DEPRECATED_NO_WARNINGS进行定义;第三种是使用推荐的新函数。如果想继续使用旧函数,可使用前两种方法。

2.1 关闭项目的SDL检查

SDL叫做“安全开发声明周期”检查,是VS2012中新添加的功能。主要是为了能更好地监管该法着的代码安全。在创建MFC应用程序的向导中,该选项默认为选中,如图2-1所示。

 

2-1 MFC应用程序向导中的SDL

可以在创建MFC应用程序时,将该选项取消勾选。

如果MFC应用程序已经创建,此时可在VS2015的菜单栏中关闭SDL检查。点击VS2015菜单栏项目->XXX属性,之后弹出的XXX”属性页对话框的左侧选择“配置属性->C/C++->常规”,在右侧的“SDL检查”选项中选择“否(/sdl-)”即可。

2.2 定义_WINSOCK_DEPRECATED_NO_WARNINGS

在项目的stdafx.h中添加对_WINSOCK_DEPRECATED_NO_WARNINGS的定义

#define _WINSOCK_DEPRECATED_NO_WARNINGS 0

将其定义为012....均可。

2.3 使用推荐的新函数

inet_pton()函数或者InetPton()函数在Ws2tcpip.h中定义,在使用这些新函数之前需要包含该头文件。

#include <Ws2tcpip.h>

原创粉丝点击