2012-01-04 23 views
1

C言語を使用して、私はopensslによって生成されたいくつかのファイルを操作しようとしており、非常に特殊な文字がたくさんあります。しかし、ファイルの終わりは時期尚早に検出されたようです。例えば それは別のものにファイルをコピーすることになっている私のプログラムの抜粋、以下を参照してください特殊文字を含むファイルの読み書きc

(簡潔上の理由から、私は、ファイルの開口部のテストを示していないが、私は私のプログラムであることを行う)

をここ
char msgcrypt[FFILE]; 
FILE* fMsg = fopen(f4Path,"r"); 
while(fgets(tmp,FFILE,fMsg) != NULL) strcat(msgcrypt,tmp); 
fclose(fMsg); 
FILE* fMsg2 = fopen(f5Path,"w"); 
fprintf(fMsg2,"%s",msgcrypt); 
fclose(fMsg2); 

はf4Pathにあるファイルの内容です:今

Salted__X¢~xÁïÈú™xe^„fl¯�˜<åD 

f5Pathにあるファイルの内容:

Salted__X¢~xÁïÈú™xe^„fl¯ 

4文字が欠落しています。

誰かがアイデアを持っていますか?

+0

印刷可能でない文字(バイナリ文字)を読み取る場合は、fopen(f4path、 "rb")およびfread()を使用することを検討してください。 – Jack

答えて

4

しかし、ファイルの末尾には時期尚早

おなじみの音を検出しているようです。

  • ファイルを開くときにfopen(f4Path, "rb")を使用してください。これはWindows上で本当の意味を持っています。
  • NUL文字で機能しない文字列関数(fprintfstrcatfgetsなど)は使用しないでください。代わりにfreadfwriteを使用してください。
+0

ありがとうございます!私は関数を使用していくつかのソケットを使って読み書きするのと同じ問題があると思いますか? – ruckpositiv

+0

これらの機能を使ってソケットを介して通信する場合、私は同じ種類の問題があるので尋ねますが、そこから問題が発生しているのかどうかはわかりません – ruckpositiv

+0

問題は修正されているようです。ありがとう。 – ruckpositiv

0

を試してコピーしてください。つまり、おそらくここで行った0に遭遇すると、コピーを停止します。

あなたは、openread,memcpyおよびwriteを使用することをお勧めします。

+0

'FILE *'は読み書きができないので、 'fopen'ではなく' open'を使ってファイルを開く必要があります。 – cha0site

+0

はい、true、修正されました。 – fge

0

私は16進エディタにコピーしたときにその文字を止め、それがEF BF BD、つまり誤っていなければBOMになります。その結果、ファイルをテキストファイルとして読み取ることができなくなります。 NULL文字は表示されません(コピーして貼り付けない限り)。

答えはすでに説明したように、テキストファイルとして扱われることはなく、str関数を避けても問題はありません。

私が最初にすることは、文字がどのように読み取られるかをチェックして、データが切り捨てられている場所を知る方法です。今のところ、read、strcat、writeのいずれかになる可能性があります。

関連する問題