1

私は C を使用している生後 2 か月の子供です。引数として ip-range を main 関数に渡し、個々の ips を持つ配列を取得するという簡単な問題があります。

例えば。func-ip-range は argv として 1.1.1.1-10 を取り、配列 [1.1.1.1, 1.1.1.2, 1.1.1.3 ......... 1.1.1.10] を返す必要があります。

私がこの問題に取り組んでいた方法は次のとおりです。コードがどこで窒息しているのかわからないため、「セグメンテーション違反」をデバッグできませんでした。

この子を救うために、どんな助けも大歓迎です。

アプローチは、コマンド ライン引数を *ip_str に渡し、この文字列を 1 文字ずつ読み取ることです。最初に会ったら「。」カウント '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です。2 つの文字列を取得したら、ips の出力を提供する必要がある限界までわかります。

于 2013-01-30T10:24:11.970 に答える
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

の助けを借りてみませんか?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

時間を割いて私を導いてくれた皆さんに感謝します。あなたの意見を通して多くの新しいことを学んだので、本当に役に立ちました。prefix (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 に答える