テストパターンを作成したいです。
作成したのは、inet_ntopなのですが、様々なネットワークアドレス構造体についてそれが変換可能なものかをテストしたいです。
下記は、inet_ntopのmanページです。
今回はAF_INETの場合を考えます。
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/inet_ntop.3.html
具体的には、
"130.0.7.23"はOKですが、
"130.00.7.23"や"130.01.7.23"はNGというふうにテストしたいです。
mainでテストパターンを作成しましたが、一つしか作成できません。
原因として、もし2つ以上つくってしまうと変数の中身が上書きされてしまうというのは分かっています。
ですが、どうすればテストパターンをいくつも作成することができるのか分かりません。
あと、本題とはそれる事なのですが、a.s_addr = inet_addr("127.256.0.");というふうに、エラーとなる場合でコンパイルして実行すると、
255.255.255.255と表示されます。
私として、エラー表示がされるよう作成したつもりなので、なぜこのように表示されるのか分かりません。
大変恐縮ではございますがお力添えいただければ幸いです。
宜しくお願い致します。
C言語
1#include <stdio.h> 2#include <string.h> 3#include <errno.h> 4#include <arpa/inet.h> 5#define p ( ( const unsigned char* )src ) 6 7const char* inet_ntop( const void* src, char* dst, socklen_t cnt ){ 8 9 // 変数の宣言 10 char buf[sizeof "255.255.255.255"]; 11 12 // srcの数値を文字列に変換 13 const unsigned n = 1 + sprintf( buf, "%u.%u.%u.%u", p[0], p[1], p[2], p[3] ); 14 15 // 文字列がdstのサイズを超えているか判定 16 if ( cnt < n ) { 17 errno = ENOSPC; 18 return( NULL ); 19 20 // 変換した文字列をdstにコピー 21 }else{ 22 23 return( ( const char* )memcpy( dst, buf, n ) ); 24 } 25} 26 27int main(){ 28 struct in_addr a; 29 char dst[256]; 30 31 a.s_addr = inet_addr( "130.0.7.23" ); 32 33 if ( inet_ntop( &a, dst, sizeof dst ) ) { 34 printf( "%s\n", dst ); 35 return( 0 ); 36 }else{ 37 return( 1 ); 38 } 39}
回答3件
あなたの回答
tips
プレビュー