strcpy()関数で質問があります。私がやろうとしているのは、ユーザーがファイル名を入力して基本的にファイルを開き、内容を取得してファイルのコピーを作成することです。c 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);
まあ理由私はメモリにバッファの別のコピーを作成したので、サイズだけでなく実際のビットデータも比較できるので、書き込まれるデータは読み込まれるデータと同じですか?
バイナリモードでビデオファイルを開こうとしましたか? – programmer
短い正気チェック:ファイル内容をメモリにコピーするのはなぜですか?ファイルの内容を読み込みバッファの内容で直接書き込むことができるので、これは絶対に必要ありません –
あなたは正しいことをしていますか? 'str *'関数はヌルで終わる(テキスト)文字列を扱うように設計されていますが、ファイルの内容はそうではありません。たとえば、読み込みファイルに ''\ 0' '文字がある場合、最後の文字以外は完全にはコピーされませんが、'' \ 0 ''がなければ未定義の動作をします(クラッシュまたは奇妙なメッセージや...)。最初に 'memcpy'、' memcmp'などの関数を見てください。 – Vovanium