判斷輸入的字串是否為ip地址
阿新 • • 發佈:2019-01-21
首先給出一個c函式的原型:int sscanf(const char *buffer,const char *format,[argument ]...)它的返回值是引數的資料,也就是argument的個數,buffer:儲存的資料,format:格式控制字串,argument:選擇性設定字串。這個程式從標準流讀取資料,可以進行無限制的輸入。下面貼出程式碼,然後引出另外一個問題,將字串ip轉換成整形ip地址。
#include<stdio.h> #include<string.h> int main(void) { char str[32]; int a,b,c,d; int ret=0; while(fgets(str,sizeof(str),stdin)!=NULL) { int len=strlen(str); str[len]='\0';//因為fgets會吃進回車符號,所以要將回車符號去掉 ret=sscanf(str,"%d.%d.%d.%d",&a,&b,&c,&d); if(ret==4&&(a>=0&&a<=255)&&(b>=0&&b<=255)&&(c>=0&&c<=255)&&(d>=0&&d<=255)) { printf("it is ip!\n"); } else printf("it is not ip!\n"); } return 0; }
gcc -Wall ip.c -o ip
12.3.4.5
it is a ip!
下面來引出另外一個問題,在很多情況下,要求把字串ip轉換成整形ip,這個問題也可以應用sscanf這個函式,首先把四個欄位儲存到a,b,c,d四個變數當中去,然後進行移位運算,因為ip地址是32位的,而且是無符號整形變數,所以可以應用unsigned int 來儲存. unsinged int ip=(a<<24)+(b<<16)+(c<<8)+d。