1

Cでポインタを扱うのに苦労しています。

私のコードは、テキスト ファイルから大きな文字列を読み込みます

1378251369.691375   84:1b:5e:a8:bf:7f   68:94:23:4b:e8:35   100
1378251374.195670   00:8e:f2:c0:13:cc   00:11:d9:20:aa:4e   397
1378251374.205047   00:8e:f2:c0:13:cc   00:11:d9:20:aa:4e   397
1378251374.551604   00:8e:f2:c0:13:cc   00:11:d9:20:aa:4e   157
1378251375.551618   84:1b:5e:a8:bf:7c   cc:3a:61:df:4b:61   37

次に、各行を配列にコピーします (fullinfo[200][BUFSIZ])。

次に、最後の2つの情報を評価して、それらを独自の配列に入れようとしています。

 cut2line[0] = 68:94:23:4b:e8:35    100
 cut2line[1] = 00:11:d9:20:aa:4e    397

これを行うために、strcpy と memcpy を試しました

     fullinfo[200][BUFSIZ];
     char cutline[BUFSIZ];
     char cut2line[BUFSIZ];

      while( fgets(line, sizeof line, pi) != NULL)  {

            strcpy(fullinfo[infoline], line);

             strcpy(cutline,fullinfo[infoline]);
             memcpy(cut2line,*cutline[25],100);
             printf("%s",cutline);      
             infoline ++;

    }

どちらもどちらかを与える

invalid type of argument of unary '*' (have 'int')

または間違ったポインタ型を含む何か。

どんな助けでも大歓迎です。

編集して明確にします:カットラインには正しい入力ファイルの行全体が含まれていますが、行の2番目の部分を独自の配列にコピーしようとするとエラーが発生します

4

2 に答える 2

0

ここでいくつかのこと。

char cut2line[BUFSIZ];

これは、文字の配列、つまり単一文字の配列を宣言および定義することを意味します。文字列へのポインタの配列が必要だと思います。つまり

char *cut2line[200]; //not sure if the size is right here.

次に、これはポインターの配列にすぎないため、ポインターが実際に指すものを割り当てる必要があります。malloc() または strdup() を使用することもできます。これは、内部で malloc() を実行します。

(または、おそらく文字列の長さと文字列の数を知っているので、スタック割り当ての 2D char 配列を使用することもできます。)

*演算子は at にあるものを逆参照するためcutline[25]、ポインターが必要です。それはあなたが望むものではないと確信しています。上記の提案をcutline[n]使用する場合は、必要なポインターが提供されます。

以上のことをすべて言いましたが、c は、何かをすばやく組み合わせてこのような文字列を操作するための最も簡単な言語ではないと思います (そして、c は私がプログラムするために支払われているものです)。私はスクリプト言語、おそらく python (または perl、tcl、ruby など、あなたが最も使い慣れているもの) を好みます。実際、bash シェル スクリプトの方がおそらく優れているでしょう。スクリプト言語を使用すると、ポインター、逆参照、割り当てなどについて心配する必要がなくなります。c でこれを行う唯一の理由はパフォーマンスです。つまり、入力ファイルが膨大です。

于 2013-09-19T15:18:55.683 に答える
0
while( fgets(line, sizeof line, pi) != NULL)  {

        strcpy(fullinfo[infoline], line);

         strcpy(cutline,fullinfo[infoline]);
         //memcpy(cut2line,*cutline[25],100); This line is what's causing your issue I think.
         memcpy(cut2line,&cutline[25],100); //Use an & 
         printf("%s",cutline);      
         infoline ++;

}
于 2013-09-19T15:06:29.153 に答える