c语言中IP地址取整

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中IP地址取整相关的知识,希望对你有一定的参考价值。

int x[4]=0;
sscanf(pTrustedIp,"%d.%d.%d.%d",&x[0],&x[1],&x[2],&x[3]);
如这样 是不是当我输入一个pTrustedIp的时候 192.168.21.5 会不会取到
x[4]=192,168,21,5

sscanf() - 从一个字符串中读进与指定格式相符的数据.
函数原型:
int sscanf( string str, string fmt, mixed var1, mixed var2 ... );

sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
其中的format可以是一个或多个 %[*] [width] [h | l | I64 | L]type | ' ' | '\t' | '\n' | 非%符号
注:
1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
2、a|b|c表示a,b,c中选一,[d],表示可以有d也可以没有d。
3、width表示读取宽度。
4、h | l | I64 | L:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
5、type :这就很多了,就是%s,%d之类。
6、特别的:%*[width] [h | l | I64 | L]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
支持集合操作:
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB'] 匹配a、B、'中一员,贪婪性
%[^a] 匹配非a的任意字符,贪婪性

它强大的功能体现在对format的支持上。
例如你程序中要分离IP地址,由于IP地址字段以“。”分隔,所以可以通过设置格式化形式分离,正如你写的sscanf(pTrustedIp,"%d.%d.%d.%d",&x[0],&x[1],&x[2],&x[3]);
则192会被分离写入x[0],168则分离写入x[1],如下的对应,所以你所说的情况不会出现
参考技术A 可以取到啊
#include <stdio.h>

int main()

int x[4];
sscanf("192.168.21.5","%d.%d.%d.%d",&x[0],&x[1],&x[2],&x[3]);
printf("\n%d.%d.%d.%d",x[0],x[1],x[2],x[3]);
return 0;
本回答被提问者采纳

C语言 问题 C: IP地址的合法性检查?

题目描述
一个合法的IP地址是由三个点分隔开的4个整数,每个整数的取值范围为:0~255之间。输入IP地址判断IP地址是否合法。
输入
第一行的整数表示有多少组数据。接下来是输入的IP地址。
输出
如果IP地址合法则输出YES,否则输出NO.
样例输入 Copy
3
122.204.218.1
122.257.33.1
25.0.3.12a
样例输出 Copy
YES
NO
NO

参考技术A #include <stdio.h>
int isVaildIp(char *ip)
int dots = 0; /*字符.的个数*/
int setions = 0; /*ip每一部分总和(0-255)*/
if (NULL == ip || *ip == '.') /*排除输入参数为NULL, 或者一个字符为'.'的字符串*/
return 0;

char *p = ip;
while (*p)
if (*p == '.')
dots ++;
if (setions >= 0 && setions <= 255) /*检查ip是否合法*/
setions = 0;
p++;
continue;

return 0;

else if (*p >= '0' && *p <= '9')
if (p != ip && *(p - 1) == '0' && *(p - 2) == '.')
return 0;/*判断是不是数字*/
setions = setions * 10 + (*p - '0'); /*求每一段总和*/

else
return 0;
p++;

if (setions >= 0 && setions <= 255)
if (dots == 3)
return 1;


return 0;

int main(void)
int n;
scanf("%d", &n);
getchar();
while (n--)
char s[100];
scanf("%s", s);
if (isVaildIp(s))
puts("YES");
else
puts("NO");

return 0;
本回答被提问者采纳
参考技术B 这个程序只要,这个程序只要使用标准的读入语句,读入四个整数,然后判断每个整数的范围大于等于零,并且小于256就可以了

以上是关于c语言中IP地址取整的主要内容,如果未能解决你的问题,请参考以下文章

如何用C语言判断ip地址是不是合法

在C语言中,如何将字符串“192.168.1.1”转换成MAC地址或IP地址?

请问 c语言怎样获取计算机ip地址啊

使用C语言判断一个IP 地址是否为私有地址

怎么用C语言去设置本地IP地址

用C语言编写程序如何获得外网的IP的地址