dポイントプレゼントキャンペーン実施中!

プログラムが動きません。
ファイルuniqipにはIPアドレスが書き込まれています。そのファイルからIPアドレスを文字列ipに格納します。
ファイルtmp4には、85.114.143.2 34f4ff4acb18802170a939ae42dcd5ee0eeccda4
のようにIPアドレスとハッシュ値が書き込まれています。
tmp4に現れるIPアドレスで、uniqipに一致するものに対応するハッシュ値を
printf("file%d,%s\n",i,hash);
の形で出力しようと思いましたが、うまくいきません。
何がまずいのでしょうか?

#include <stdio.h>
#include <string.h>

//ひとつのIPアドレスに現れるユニークなハッシュ値の数をカウントする



int main()
{
FILE *fp,*gp;
char ip[269730][16];
char ip2[16];
char hash[42];
int i,j;




fp = fopen("uniqip","r");

if(fp == NULL){
printf("can not open the file.\n");
return 1;
}


for(i=0;i<267930;i++)
{
fscanf(fp,"%s",ip[i]);
//printf("%s\n",ip[i]);

}

fclose(fp);

//////////////////////////////////////////////////////////////////////////////////////////////////////

gp = fopen("tmp4","r");

if(gp == NULL){
printf("can not open the file.\n");
return 1;
}


for(i=0;i<267930;i++){
for(j=0;j<2470766;j++){

fscanf(gp,"%s %s",ip2,hash);

printf("%s\n",ip[i]);

if(!strcmp(ip[i],ip2))
{
printf("file%d,%s\n",i,hash);

}




}

}




return 0;
}

A 回答 (1件)

「うまくいきません」ではなく、


・どのようになることを期待していたのか
・その期待に反してどのような結果になったのか
を書くようにしてください。

ぱっと眺めて気になった点を挙げてみます。

> char ip[269730][16];

自動変数で4MB以上の配列を使うのは大きすぎます。スタック不足でプログラムが動かないかもしれません。

> for(i=0;i<267930;i++)

上の配列の宣言と数が合っていません。

> for(i=0;i<267930;i++){
> for(j=0;j<2470766;j++){
> fscanf(gp,"%s %s",ip2,hash);

tmp4というファイルにはIPアドレスとハッシュ値の組が6600億以上も書かれているのでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。別のアプローチで解決できました。

お礼日時:2010/10/30 20:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!