テキストファイルをバイナリファイルに変換するコードを記述しています。この特定の例では、最初の名前を表示しないという事実を除いて、エラーは返されず正常に実行されます。私の入力ファイルにはjohn doe 1 4.0
が含まれています。予想される出力は[email protected]▒
ですが、出力は[email protected]▒
です。私はfseekを使ってオフセットを移動しようとしました。私はファイルを別々に閉じようとしました。変数の名前を変更してif文を変更しようとしました。fscanf()入力ファイルからすべてのコンテンツの一部だけを書き出しません
私は完全にはわかりませんが、エラーがループの可能性があると感じています。 firstNameとlastNameを入れ替えても、同じことが起こりますが、逆になります。つまり、fwriteを使用して最初に読み込まれたものは、私のコードで省略します。これが起こるように私のコードに何が間違っていますか?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void textToBinary(char *inputFile, char *outputFile){
FILE *ifp, *ofp;
char firstName[256], lastName[256];
int sID;
float gpa;
unsigned char firstNameLen = strlen(firstName);
unsigned char lastNameLen = strlen(lastName);
if(((ifp = fopen(inputFile, "r")) != NULL)&&((ofp = fopen(outputFile, "w")) != NULL)){
while((fscanf(ifp, "%s %s %d %f\n", firstName, lastName, &sID, &gpa)) != EOF){
fwrite(&firstNameLen, sizeof(firstNameLen), 1, ofp);
fwrite(firstName, sizeof(char), firstNameLen, ofp);
fwrite(&lastNameLen, sizeof(lastNameLen), 1, ofp);
fwrite(lastName, sizeof(char), lastNameLen, ofp);
fwrite(&sID, sizeof(int), 1, ofp);
fwrite(&gpa, sizeof(float), 1, ofp);
}
fclose(ifp);
fclose(ofp);
}else{
fprintf(stderr, "Couldn't open: %s\n", ifp);
}
}
を使用してコードの再書き込みを推奨しました。これらはループ内に属します。 – Gene
あなたの 'fscanf()'チェックは '!= EOF'ではなく' == 4'でなければなりません。 EOFだけでなく、数字0,1,2、または3が得られ、すべてが問題を示している可能性があります。 –
'char firstName [256]、... unsigned char firstNameLen = strlen(firstName);'はUB – chux