dポイントプレゼントキャンペーン実施中!

c言語について、解けない問題があります。教えてください。

問題:第1引数に指定したファイルからバイナリーモードで1バイトずつファイルを読み込み、ファイルの内容を16進数で示した物を第2引数に指定したファイルに書き込む、プログラムを作成せよ。ただし、16バイトごとに改行を入れること。


<ファイルイメージ「file2.txt」>
aaaaa
bbbbb
ccccc
ddddd
eeeee

実行
>file3.exe file1.txt file2.txt

<ファイルイメージ「file2.txt」>
61 61 61 61 61 0D 0A 62 62 62 62 62 0D 0A 63 63
63 63 63 0D 0A 64 64 64 64 64 0D 0A 65 65 65 65
65 0D 0A

A 回答 (3件)

 UNIXユーザーでしたら↓の簡単なプログラムを使って


  ./a.out<exefile1>file2.txt
のようにリダイレクトして終わりです。

/* Hexadecimal display program by Mac OSX
* file name: lql.c
* compile: gcc lql.c
* execution: ./a.out<read_file
*/

#include <stdio.h>

int main(void) {
int c, n;

printf("00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f\n");
printf("-----------------------------------------------\n");
n = 0;
while ((c = getc(stdin)) != EOF) {
if (++n == 16) {
printf("%.2x\n", c);
n = 0;
} else
printf("%.2x ", c);
}
if (n != 0)
printf("\n");

return 0;
}


 丸投げの質問はWindowsユーザーのようですが、↑をベースに改良を加えることになります。なお、なぜそのようなプログラムになるかの学習はきちんと行ってくださいネ。


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
FILE *fp_write, *fp_read;
int c, n;

if (argc != 3) {
printf("Parameter error\n");
return 0;
}
if ((fp_write = fopen(argv[--argc], "w")) == NULL ||
(fp_read = fopen(argv[--argc], "r")) == NULL) {
printf("Can't open %s\n", argv[argc]);
exit(1);
}

fprintf(fp_write, "00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f\n");
fprintf(fp_write, "-----------------------------------------------\n");
n = 0;
while ((c = getc(fp_read)) != EOF) {
if (++n == 16) {
fprintf(fp_write, "%.2x\n", c);
n = 0;
} else
fprintf(fp_write, "%.2x ", c);
}
if (n != 0)
fprintf(fp_write, "\n");
fclose(fp_write);
fclose(fp_read);

return 0;
}
    • good
    • 0

>友達のためにこの質問を出して、わかる人が教えてくれれば助かります



では、そのお友達に、この問題のどこがわかっていて、どこがわからないかを聞いてきてください。
それと、わからないなりにもプログラムを作ったと思うので、それをもらって来てください。

自分の理解度を確認する、というのは、プログラムを勉強中のそのお友達のためにもいいと思います。
    • good
    • 0

それで、どの辺が助けてほしい内容でしょうか?


「全て」というのはなしで。

少なくとも、学校の課題なら全てはともかくとして一部の機能については学習していると思うので。


http://detail.chiebukuro.yahoo.co.jp/qa/question …
ふーん。

この回答への補足

すみません、http://detail.chiebukuro.yahoo.co.jp/qa/question …ってどういう意味ですか?誤解していると思いますが、友達のためにこの質問を出して、わかる人が教えてくれれば助かります

補足日時:2010/01/28 01:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!