strcpy() 関数について質問があります。私がやろうとしているのは、ユーザーがファイル名を入力し、基本的にファイルを開き、コンテンツを取得してファイルのコピーを作成することです。
ただし、書き込み前に内容 read() がコピー ファイルに書き込まれた内容と同じかどうかを確認するために、いくつかのエラー チェックを行うことにしました。したがって、ファイル読み取りのファイルサイズを使用してコンテンツを動的配列に read() するため、バッファはデータに適したサイズです。次に、そのコピーを別の動的バッファーに作成し、strcmp() を使用して同じかどうかを確認します。同じ場合は、コピー バッファーを出力ファイルに書き込みますか?
これは特定のファイルに対しては正常に機能しますが、ビデオ ファイル (mpeg) などに問題があり、ビデオ ファイルを開くときに「ストリームの種類を特定できませんでした」というエラーが表示されます。
char* buffer1 = malloc(filessize);
char* buffer2 = malloc(filessize);
read(file, buffer1, filesize);
strcpy(buffer2, buffer1); //copy buffer1 into buffer2
if(strcmp(buffer1, buffer2) == 0)
{
write(outputfile, buffer2, filesize); //write copied buffer to file
}
free(buffer1); free(buffer2);
メモリ内にバッファの別のコピーを作成した理由は、サイズだけでなく実際のビット データを比較できるようにするためです。したがって、書き込まれるデータが読み取られるデータと同じであることがわかります。