- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FILE オープンについて)
FILEオープンで発生するセグメンテーションエラーの解析方法と対処法
このQ&Aのポイント
- FILEオープンに関する質問です。search.txtから取得したファイルパスをオープンして解析する際にセグメンテーションエラーが発生してしまいます。原因と解決方法を教えてください。
- 質問者さんはsearch.txtから取得したファイルパスを1行ずつ読み込んでオープンし、解析したいと考えています。しかし、fopenやfreadでセグメンテーションエラーが発生してしまっています。どのようにすればセグメンテーションエラーを解決できるのでしょうか。
- セグメンテーションエラーはメモリアクセスの不正操作が原因で発生するエラーです。質問者さんのコードを見ると、ファイルパスの長さが1024文字まで扱えるようになっているため、バッファオーバーフローが発生している可能性があります。バッファオーバーフローを防ぐためには、適切なメモリサイズを確保する必要があります。また、ファイルパスが存在しない場合やオープンに失敗した場合もエラーチェックが必要です。
- みんなの回答 (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 ); } 以上。
お礼
ありがとうございます。 無事にファイルオープンおよびfread()できました。 大変助かりました。