1

我是使用 C 的 2 个月大的孩子。我有一个简单的问题,就是将 ip-range 作为参数传递给 main 函数并获得一个带有独立 ips 的数组。

例如。func-ip-range 应该将 1.1.1.1-10 作为 argv 并返回一个数组 [1.1.1.1, 1.1.1.2, 1.1.1.3 ......... 1.1.1.10]。

我解决这个问题的方法如下,我无法调试“分段错误”,因为我不知道代码在哪里阻塞。

非常感谢任何帮助来拯救这个孩子。

方法是将命令行参数传递给 *ip_str 并逐字符读取此字符串。一旦我遇到第一个'。我增加计数'c',当计数c == 3时,我想将字符串从那里存储到一个新的字符串变量,直到我达到'-',然后在达到'-'之后将字符串的其余部分存储到一个新的字符串中。但是我对程序编写和调试的接触有严重的问题。

除此之外如何解决问题的方向对我的学习非常有帮助。

    void array_ip(char *ip_str,char **iplist)
    {
    for(i=0,j=0;*(ip_str+i) != '\0';i++)
    {
            if(*(ip_str+i)=='.')
            {c++;
            }
            if(c==3 && (*(ip_str+i )!= '-'))
            {
            *(a+j) = *(ip_str+i);
            j++;
            }
            if(*(ip_str+i) == '-')
            {
            break;
            }
    }
    for(k=0;*(ip_str+i) != '\0';k++,i++)
    {
    *(b+k)=*(ip_str+i);
    }

    printf("the starting last octet is %s \n",a);
    printf("the Ending last octet is %s \n",b);
    }
4

4 回答 4

1

您可以使用的另一个函数是使用“-”作为分隔符的strtok 。一旦你有了你的两个字符串,你就知道你必须提供什么限制来提供 ips 的输出。

于 2013-01-30T10:24:11.970 回答
0

为什么不使用的帮助?strrchr()

如果您使用的是 linux,请在您的 linux 上执行 man 3 strrchr

编辑strtok改用:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char str[] = "1.1.1.1-10";
        char * temp;

        temp = strtok(str,"-");
        temp = strtok(NULL,"-");
        int number = atoi(temp);
        printf("%d",number);
return 0;
}
于 2013-01-30T10:21:42.553 回答
0

我建议只使用sscanf()开始:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
   int a, b, c, d, len;

   if(argc != 2)
     exit(1);

   if(sscanf(argv[1], "%d.%d.%d.%d-%d", &a, &b, &c, &d, &len) == 5)
   {
     pintf("Got IP range\n");
   }
   return EXIT_SUCCESS;
}
于 2013-01-30T11:42:41.447 回答
0

感谢大家抽出一些时间来指导我。这真的很有帮助,因为我通过您的输入学到了很多新东西。我只是粘贴我为获取前缀 (11.1.1.) 和 startValue (251) - endValue (254) 而编写的代码。我将使用 strcat 连接并将结果传递给数组。我仍然不太习惯将指针参数传递给函数并从指针中获取数组,但很快我就会了。

再次感谢 !!

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char str[]="11.1.1.251-254";
char *temp, *a,*b,*c,*temp2,*q;
char prefix[50];
int i,count,k;
temp = strrchr(str,'.');
if(temp!=NULL)
{
printf("found a '.' as %s\n",temp);
}

b = strtok(temp,"-");
c = strtok(NULL,"-");       
b = strtok(b,".");

for(i=0,k=0,count=0;count<3;i++,k++)
{

prefix[k]=str[i];
if(str[i]=='.')
{
count++;
}
}
printf("%s \n",prefix);
printf("%s \n",b);
printf("%s \n",c);
return 0;
}
于 2013-01-31T06:17:13.017 回答