①fopenで”rb”指定で、ファイルAを指定。
(ファイルAの内容は、テキストファイル)
②freadで、でファイルAの内容を読み込み、fwriteで標準出力に内容を出力する。
期待したい結果
ファイルAのテキストの内容がバイナリー出力されているファイルBが作成されて欲しい。
(0と1だけで表現されて出力されて欲しい。)
実際の結果
標準出力先をみると、ファイルAのテキストの内容が、文字で普通に出力されている。
私の考え
fopenで、テキストファイルをバイナリーモードで開き、
その状態でテキストファイルの内容を標準出力に出力しているので、
2進数で出力されるのだと思っていましたが、実際には違うようです。
なぜなのでしょうか??
ご回答よろしくお願いいたします。
ソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5#define ARGUMENT_MUM 2 6#define NUM_PER_LINE 16 7 8int main(int argc, char** argv) 9{ 10 FILE *fp = NULL; 11 #ifdef D_DEBUG 12 FILE *w_fp = NULL; 13 #endif 14 char fromFile[SIZE] = {0}; 15 char fileContents[SIZE] = {0}; 16 int iRet = 0; 17 long lPos = 0L; 18 19 if (argc != ARGUMENT_MUM){ // 開きたいファイル名が引数として指定されていなければ 20 printf("コマンドライン引数エラー\n"); 21 return -1; 22 } 23 memcpy(fromFile, argv[1], sizeof(fromFile)); 24 fp = fopen(fromFile, "rb"); // バイナリーモードでファイルを開く 25 if (fp == NULL){ 26 printf("fopen失敗\n"); 27 return -1; 28 } 29 30 while(!feof(fp)){ 31 // 指定して開いたファイルを読み込んで 32 iRet = fread(fileContents, sizeof(char), NUM_PER_LINE, fp ); 33 if ((iRet < NUM_PER_LINE) && !feof(fp)){ // 指定数分読み込めていないかつファイルの終わりでもない場合 34 printf("fread失敗\n"); 35 return -1; 36 } 37 // 読み込んだ内容を標準出力へ出力 38 iRet = fwrite(fileContents, sizeof(char), NUM_PER_LINE, stdout); 39 if ((iRet < NUM_PER_LINE) && feof(fp)){ 40 printf("fwrite失敗\n"); 41 return -1; 42 } 43 } 44 45 46 47 iRet = fclose(fp); 48 if (iRet != 0){ 49 printf("fcloseエラー"); 50 return -1; 51 } 52 53 return 0; 54}
terminal
1ユーザー名@コンピュータ名 第2回 % cat 問題10.txt 2aaa 3bbB 4CCC 5ユーザー名@コンピュータ名 第2回 % ./a.out 問題10.txt 6aaa 7bbB 8CCC
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/13 06:17