備忘録

プログラミングの備忘録書いていきます

MFC 文字列がIPアドレスフォーマットかどうか判断する

最近C++を使う事が増えてきたのでメモ。

MFCにて文字列がIPアドレスフォーマットかどうかについてチェックする方法について備忘録残していきます。(Visual Studio2019使用) 調べるとどうやら"inet_addr"を使えばいいらしいので使おうとするも以下のエラー。

エラー C4996 'inet_addr': Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

inet_addrは推奨できないのでinet_ption()かInetPton()使ってねとのこと。
と言うわけでInetPton()を使用する。

InetPtonW function (ws2tcpip.h) - Win32 apps | Microsoft Docs

・第1引数 : AF_INET指定でIPv4、AF_INET6指定でIPv6対応

・第2引数 : フォーマットチェックを行う文字列のポインタ

・第3引数 : 変換したIPアドレスを格納するポインタ(今回は使用せず)

・返り値 : 第2引数のフォーマットがIPアドレスでなければ0を返す

#include <ws2tcpip.h>

char    ipaddr[16];
CString ipstr = _T("127.0.0.1");
int     ret;

// ipstrがIPアドレスフォーマットかどうかチェック
ret = InetPton(AF_INET, ipstr , ipaddr);
if (ret == 0)
{
   //戻り値が0の場合はIPアドレスフォーマットでないのでfalse
   return(false);
} 
return(true);


第2引数に取得した文字列を入れることによりIPアドレスフォーマットかどうかチェックすることが出来る。