前提・実現したいこと
最後の文字が特定の文字か判定したいです。
その特定の文字は「.」です。
ソースコードのassertの内容をみればわかるとは思いますが、アドレスの最後が「23.」となっており、アドレスの表記の仕方が間違っているので、これをエラーにしたいです。
ですが、
if( strstr( src, "23." ) ){
return( 0 );
のようなソースコードしか思い浮かばず、詰まっています。
また、作成したソースコードはinet_ptonのような動きをします。
お力添えいただければ幸いです。
よろしくお願い致します。
該当のソースコード
C言語
1#include <assert.h> 2#include <arpa/inet.h> 3#include <stdio.h> 4#include <string.h> 5 6int inet_pton( const char *src, void *dst ){ 7 8 // 変数の宣言 9 int suuti1, suuti2, suuti3, suuti4; 10 11 // 共用体の型の定義 12 union number{ 13 uint32_t number1; 14 uint8_t number2[4]; 15 }; 16 17 // 共用体の変数名の宣言 18 union number No; 19 20 // srcの文字列を数値に変換し、それが4つあるか判定 21 if ( sscanf( src, "%d.%d.%d.%d", &suuti1, &suuti2, &suuti3, &suuti4 ) != 4 ){ 22 return( 0 ); 23 } 24 25 // 数値に変換したものを変数に格納する 26 No.number2[0] = suuti1; 27 No.number2[1] = suuti2; 28 No.number2[2] = suuti3; 29 No.number2[3] = suuti4; 30 31 // number1のメモリをdstにコピーする 32 memcpy( dst, &No.number1, 4 ); 33 return( 1 ); 34} 35 36int main(){ 37 int result; 38 struct in_addr in_addr; 39 40 result = inet_pton("130.0.7.23", &in_addr); 41 assert(result == 1 && in_addr.s_addr == ((23<<24)|(7<<16)|(0<<8)|130)); 42 43 result = inet_pton("130.0.7.23.", &in_addr); 44 assert(result == 0); 45 46 return(0); 47} 48
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/27 05:09 編集
2019/11/27 05:13
2019/11/27 05:16
2019/11/27 05:21
2019/11/27 05:36
2019/11/27 05:45 編集
2019/11/27 05:49 編集
退会済みユーザー
2019/11/27 05:51 編集
2019/11/27 05:49
退会済みユーザー
2019/11/27 05:51 編集