我已经完成了在c中轻松编程以检查IP地址类的任务。我的问题是我不在c中工作,我不知道我的程序有什么问题,因为我没有任何IDE,所有内容都编译在我的Debian上。
#include <stdio.h>
#include <stdlib.h>
int main() {
int ip[4];
int i=0;
printf("Enter IP address: ");
for(i=0;i<4;i++) {
printf("%d: ",i);
scanf("%s",ip[i]);
}
printf("Your IP address: %03d.%03d.%03d.%03d\n",ip[0],ip[1],ip[2],ip[3]);
if(ip[0]>=0 && ip[0]<=127){
printf("This is class A IP address\n");
printf("Network address: %03d.0.0.0",ip[0]);
}
if(ip[0]>127 && ip[0]<=191){
printf("This is class B IP address\n");
printf("Network address: %03d.%03d.0.0",ip[0],ip[1]);
}
if(ip[0]>191 && ip[0]<224){
printf("This is class C IP address\n");
printf("Network address: %03d.%03d.%03d.0",ip[0],ip[1],ip[2]);
}
return 1;
}
当我有这个代码时,会出现分段错误,而在第18行我做了
scanf("%s",&ip[i]);
我没有任何错误,但我的数字是随机的。
答案 0 :(得分:1)
scanf
需要指向存储结果的内存的指针。你没有传递指针。您传递数组值。
除此之外,您正在尝试将字符串(也称为%s)扫描为整数变量。要扫描整数,请使用%d
所以改变
scanf("%s",ip[i]);
到
scanf("%d", &ip[i]);
最后,您应该始终检查scanf
返回的值,以确保您获得正确数量的项目,即
if (scanf("%d", &ip[i]) != 1)
{
// Illegal input.
// Add error handling, e.g. just terminate
exit(1);
}
答案 1 :(得分:1)
更改行:
scanf("%s",ip[i]);
到:
scanf("%d", &ip[i]); //%d instead of %s
as:
&
,必须使用符号scanf
。int
s,因此正确的说明符为%d
。 %s
用于字符串。