• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FILE オープンについて)

FILEオープンで発生するセグメンテーションエラーの解析方法と対処法

このQ&Aのポイント
  • FILEオープンに関する質問です。search.txtから取得したファイルパスをオープンして解析する際にセグメンテーションエラーが発生してしまいます。原因と解決方法を教えてください。
  • 質問者さんはsearch.txtから取得したファイルパスを1行ずつ読み込んでオープンし、解析したいと考えています。しかし、fopenやfreadでセグメンテーションエラーが発生してしまっています。どのようにすればセグメンテーションエラーを解決できるのでしょうか。
  • セグメンテーションエラーはメモリアクセスの不正操作が原因で発生するエラーです。質問者さんのコードを見ると、ファイルパスの長さが1024文字まで扱えるようになっているため、バッファオーバーフローが発生している可能性があります。バッファオーバーフローを防ぐためには、適切なメモリサイズを確保する必要があります。また、ファイルパスが存在しない場合やオープンに失敗した場合もエラーチェックが必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★エラーをチェックしていないからです。 ・fopen() 関数でオープンできたかどうかをチェックして下さい。  fread() 関数の前の fopen() で正しくファイルがオープンできていない可能性があります。  つまり『search.txt』から1行ずつパスを fgets() していますが改行コードを取り除いて  いません。これが原因で fopen() エラーしています。だから fread() でセグメンテーションの  エラーが起きています。 ・次のようにして下さい。 サンプル: char *find; if ( (fp = fopen(com1,"r")) != NULL ){  while ( fgets(buf1,sizeof(buf1),fp) != NULL ){   if ( (find = strchr(buf1,'\n')) != NULL ){    *find = '\0';   }   if ( (confp = fopen(buf1,"rb")) != NULL ){    size_t size = fread( buf2, sizeof(char), sizeof(buf2), confp );        for( i = 0 ; i < 1024; i++ ){     if ( (buf2[i] == 0xff) && (buf2[i+1] == 0xe0) ){     printf( "%02x\n", buf[i+5] );     }    }    fclose( confp );   }  }  fclose( fp ); } 以上。

the-ai
質問者

お礼

ありがとうございます。 無事にファイルオープンおよびfread()できました。 大変助かりました。

関連するQ&A