プロが教えるわが家の防犯対策術!

以下のプログラムなのですが、引数を与えると下のようなエラーになります。

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


int main(int argc, char** argv) {

FILE *in ,*out;
unsigned char ch;

if(argc != 3)
{
printf("入力エラーです。\n");
exit(1);
}

if((in = fopen(argv[1],"rb")) == NULL)
{
printf("入力ファイルが開けません。\n");
exit(1);
}

if((out = fopen(argv[2],"rb")) == NULL)
{
printf("出力ファイルが開けません。\n");
exit(1);
}

while(!feof(in))
{
ch = fgetc(in);
if(!feof(in))
fputc(~ch,out);
}

fclose(in);
fclose(out);

return 0 ;
}

tyobi@tyobi-laptop:~$ gcc test.c diary copy
diary: file not recognized: File format not recognized
collect2: ld はステータス 1 で終了しました

どうしたらよいのでしょうか?

A 回答 (3件)

tyobi@tyobi-laptop:~$ ./a.out diary copy


が、正しいコマンドのうちかたですが、
その結果が、どのようになることを期待していますか。
copyという名のファイルができていませんか?
それが、できていればOKだと思いますが。
このプログラムが、正しく動作したとき、
"正常におわりました"・・というようなメッセージはださずに、
そのまま、おわるような作りになっていますよ。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
実行ファイルa.outの直後に引数を置くのは知りませんでした。
たしかに、失敗したか成功したかを知るためにメッセージを
最後に残すのは大切ですね。

お礼日時:2009/08/24 17:37

a.outの実行には


./a.out
のように先頭に ./ が必要かもしれません
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。

お礼日時:2009/08/24 16:17

(1)gcc test.c と打って下さい。


エラーがなければ、a.outという実行形式のファイルが出来ます。
そしたら
(2)a.out diary copy と打って下さい。
もし、プログラムが正しいなら、あなたの期待した結果になります。
(1)(2)のどちらかでエラーがでたら、再度質問し直して下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
1は出来ました。実行形式のファイルは作成されます。
a.out だとプログラムどおりに入力エラーですとなりました。

tyobi@tyobi-laptop:~$ ./a.out
入力エラーです。

そしてa.out diary copyだと、何もおこらずそのまま

tyobi@tyobi-laptop:~$ ./a.out diary copy
tyobi@tyobi-laptop:~$

となりました。やはり上手くいきません。

お礼日時:2009/08/24 16:16

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