これは初心者向けの C プログラミング単位です。MAC アドレスと受信したデータを含むテキスト ファイルを読み取り、関連データ (アドレスとパケット数) を分離し、アドレスを繰り返さずに配列にコピーし、関連するパケット数を合計しようとしています。同一のアドレスが検出されました。
ファイルを問題なく読み取ることができ、必要な各行のビットを問題なく取得できますが、読み取った各アドレスを既に配列にあるものと照合しようとすると、問題が発生します。完全な行数をカウントする整数の場所に応じて、プログラムは同一の文字列を認識できず、それらをすべてファイルにそのまま出力するか、アドレス [0] に重ねて出力し、最後の住所。私は困惑しており、これについて新鮮な目が必要です-どんな提案でも大歓迎です。
私のコードは次のとおりです。
static void readadds(char filename[])
{
FILE* packetfile = fopen(filename, "r");
FILE* datafile = fopen("packdata.txt", "w+");
// Open file from input; create temporary file to store sorted data.
char line[100];
char addresses[500][18];
int datasize[500];
int addressno = 0;
// Create storage for lines read from text file, addresses and related data.
if(packetfile != NULL)
{
while(fgets(line, sizeof line, packetfile) != NULL)
{
int linenum = 0;
char thisadd[18];
int thisdata;
//Create arrays to temp store data from each line
sscanf(line, "%*s %*s %s %i", thisadd, &thisdata);
for(int i = 0; i < 500; i++)
{
if(strcmp(thisadd, addresses[i]) == 0)
{ //check if the address is already in the array
int x = datasize[i];
datasize[i] = x + thisdata; //sum packet data if address already exists
printf("Match!\n");
break;
}
else
{
strcpy(addresses[linenum], thisadd); //initialize new address
datasize[linenum] = thisdata; //initialize assoc. data
linenum++;
addressno++;
printf("Started!\n");
break;
}
}
}
for(int i = 0; i <= addressno; i++)
{
printf("%s %i\n", addresses[i], datasize[i]);
fprintf(datafile,"%s %i\n", addresses[i], datasize[i]);
}
}
fclose(packetfile);
fclose(datafile);
}
このバージョンでは、アドレス [0] に印刷されます。for() ループで linenum が addressno に置き換えられた場合、同一の文字列は認識されません。私のデータセットは次のように配置されています:
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
1378251375.552697 84:1b:5e:a8:bf:7c cc:3a:61:df:4b:61 37
1378251375.553957 84:1b:5e:a8:bf:7c cc:3a:61:df:4b:61 37
1378251375.555332 84:1b:5e:a8:bf:7c cc:3a:61:df:4b:61 37