ファイルのコピー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
IT侍

ファイルのコピー

#1

投稿記事 by IT侍 » 15年前

もともとあるファイルの内容を違うファイルにコピーするプログラムで watch を入力するとそのファイルの内容をコマンドに表示させるプログラムなのですが、なぜかうまくいきません。コマンドに永遠に????が表示されてしまいます。
どうしてでしょうか?ご教授願います。以下がソースです。何故かファイルもコピーされてません。何が原因なのでしょうか。


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

int main(int argc, char *argv[/url])
{
FILE *to, *from;
char ch,watch;

if (argc < 3 || argc > 4){
puts("エラーです。正しい使用法で使用してください。\n"
"<プログラム名> <元のファイル名> <コピー先のファイル名> <watch>");
exit(1);
}

if ((from = fopen(argv[1],"r")) == NULL){
puts("error! I can't this program");
exit(1);
}

if ((to = fopen(argv[2],"w")) == NULL){
puts("error!");
exit(1);
}

if (argc == 4 || !(strcmp(argv[3],"watch")))
watch = 1;
else
watch = 0;


while ((ch = fgetc(from)) == EOF){
fputc(ch,to);
if(watch)
putchar(ch);
}

fclose(to);
fclose(from);

return 0;

}

Poco

Re:ファイルのコピー

#2

投稿記事 by Poco » 15年前

while文で指定するのは、ループ終了条件ではなく、ループ継続条件です。
((ch = fgetc(from)) == EOF)
→((ch = fgetc(from)) != EOF)
とするとどうなりますか?

IT侍

Re:ファイルのコピー

#3

投稿記事 by IT侍 » 15年前

ありがとうございました。
おかげさまで問題が解決しました。
こういったうっかりミスでプログラムって全然動かないもんですね。

これからも精進していきます。
適切な指導ありがとうございました!

みけCAT

Re:ファイルのコピー

#4

投稿記事 by みけCAT » 15年前

> if (argc == 4 || !(strcmp(argv[3],"watch")))
このままだと、argc==3のときに範囲外のargv[3]にアクセスすることになり、危険です。
if (argc == 4 && !(strcmp(argv[3],"watch")))
とすべきだと思います。

(追記)
間違っていたので修正しました。 画像

閉鎖

“C言語何でも質問掲示板” へ戻る