我正在尝试编写一些C代码来增加IP地址。我希望其中一个变量“j”在达到256后重置为0,因为每个八位字节只有255个ip地址。我的问题是我似乎无法将“j”设置为0.任何想法我做错了什么?
int main()
{
int breakCount = 300;
int j = 0;
int x = 0;
for(int i = 0; i < breakCount; i++)
{
printf("class-map type traffic match-all cm%d\n",i);
printf("match source-address ipv4 100.%d.%d.0\n",x,j);
j++;
if (j == 256)
{
x++;
int j = 0;
}
}
return 0;
}
/ * code snip output * /
match source-address ipv4 100.0.253.0
class-map type traffic match-all cm254
match source-address ipv4 100.0.254.0
class-map type traffic match-all cm255
match source-address ipv4 100.0.255.0
class-map type traffic match-all cm256
match source-address ipv4 100.1.256.0
class-map type traffic match-all cm257
match source-address ipv4 100.1.257.0
答案 0 :(得分:6)
从重置它的int
中删除int j = 0;
(在循环中),因为现在你创建一个局部变量而不是使用之前声明的变量。
答案 1 :(得分:4)
你试过给j分配零吗?
if (j == 256)
{
x++;
j = 0;
}
答案 2 :(得分:0)
看起来你正在增加单个八位字节。将点分的IPv4字符串首先转换为单个32位无符号整数然后递增会更好。
答案 3 :(得分:0)
重置变量的另一种方法是:
j = j %256;
if (j == 0) {
x++
}
答案 4 :(得分:0)
/* 一些函数比如重置 vars printf 可能会这样做。你应该制作一个数组而不是打印它。 */ int main() {
int breakCount = 300;
int j = 0;
int x = 0;
int list_[breakCount][2];
for(int i = 0; i < breakCount; i++) {
list_[i][0] = x;
list_[i][1] = j;
j++;
if (j == 256)
{
x++;
int j = 0;
}
}
for (int i = 0; i < breakCount; i++) {
printf("class-map type traffic match-all cm%d\n", i);
printf("match source-address ipv4 100.%d.%d.0\n", list_[i][0], list_[i][1]);
}
return 0;
}
答案 5 :(得分:-1)
提示:您可以尝试将其分为两个循环:
for(int i = 0; i < 256; i++)
和
for(int i = 256; i < 300; i++)
在这两种情况下,将j初始化为0。