首先給出一個c函數的原型:int sscanf(const char *buffer,const char *format,[argument ]...)它的返回值是參數的數據,也就是argument的個數,buffer:存儲的數據,format:格式控制字符串,argument:選擇性設定字符串。這個程序從標准流讀取數據,可以進行無限制的輸入。下面貼出代碼,然後引出另外一個問題,將字符串ip轉換成整形ip地址。
[cpp]
#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';
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。