
コマンドラインからコピー元、コピー先ファイル名を指定してファイルをコピーするプログラムなんですが…
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
FILE *fp;
if ((fp = fopen(argv[0],"r") == NULL){
printf("ファイル%sが存在しません。\n",argv[0]);exit(-1);
}
if ((fp = fopen(argv[1],"w") == NULL){
printf("ファイル%sがコピーできません。\n",argv[1]);exit(-1);
}
fclose(fp);
}
どこか間違っているところがあるでしょうか?
ありましたら詳しく教えてもらえると幸いです。
少し自信がないのでわかる方はよろしくおねがいします。

No.1ベストアンサー
- 回答日時:
おそらくこのソースだとかなり問題があると思います。
1.argv[0]は自分です。
test.exe aaa bbbとした場合、
argv[0]="test.exe"
argv[1]="aaa"
argv[2]="bbb"
となります。
2.fpが一つしか定義されていません。
FILE *fp1, *fp2として二つ定義しそれぞれのポインタを格納しましょう。
⇒一回目のfopenのfpを二回目で又使ってしまっています。
3.fcloseはファイルごとに行いましょう。
4.これではファイルを開いているだけで、
書き込んでいる作業がどこにもありません
書き込むにはfwriteです。
簡単なフローとしては、
1.argv[1]をオープンして内容を読込み内部バッファに保存しておく。
2.argv[2]をオープンして内部バッファの内容を書き込む。
3.両方クローズする。
ですね。
これ以外にも方法はいろいろあります。
わからなかったら補足して下さい。
No.3
- 回答日時:
他のお二方の回答に加えて、
fopen()の第2引数を上から順に
"rb"
"wb"
にする必要があります。
これがないと、ファイル中の0x1Aをファイル終端として認識してしまい、それ以降のデータはコピーされません。
テキストファイルのコピーだけしか行わない場合は不要ですが…
No.2
- 回答日時:
エラー発生時に処理が中断されていません。
元のファイル(argv[1])が存在しなくても、先のファイル(argv[2])が書きこみ不能でも強引にコピーしようとして更なるエラーを引き起こすでしょう。
一般に、コマンドラインで使用するプログラムはエラーを検知したら
1 エラーを回避する為の処理(正しいファイル名の再入力など)を行う
2 処理を中断する
どちらかです。
この場合、エラーメッセージが表示されているので0以外の値でreturnするべきでしょう。
以下、余計なお世話かもしれませんが…
・エラーはメッセージはprintf()よりもperror()のほうがよい
・コピー先ファイルが既に存在するときもエラーにしたほうがよいかもしれない
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
[エクセル]コピーするとオブジ...
-
vbsでExcelのシートをコピーす...
-
frxファイルの役目
-
バッチファイル 別ファイルにリ...
-
現在のブックを閉じないで、マ...
-
バッチファイルのコピーで
-
同じファイル名 上書きしないフ...
-
エクセルのハイパーリンクがコ...
-
ファイルサーバ上のファイルが...
-
ピクチャーボックスやイメージ...
-
バッチファイル XCOPYで上書き...
-
Vba初心者です。下記のコード助...
-
xcopyでのバッチコピー方法でコ...
-
賃貸アパートの退去の時の返却...
-
FTPとファイルコピーの違いにつ...
-
WSHでファイルとフォルダのコピ...
-
ハイフネーションされている英...
-
VB6.0でデバッグ時、文字列の値...
-
バッチでリストに基づきサブフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のコメントのサ...
-
ファイルサーバ上のファイルが...
-
Vba初心者です。下記のコード助...
-
MSオフィス2013にMS365が上書き...
-
同じファイル名 上書きしないフ...
-
バッチファイル XCOPYで上書き...
-
エクセルのハイパーリンクがコ...
-
frxファイルの役目
-
[エクセル]コピーするとオブジ...
-
xcopyでのバッチコピー方法でコ...
-
バッチファイル 別ファイルにリ...
-
bat 同名ファイルコピー時にリ...
-
バッチファイルのコピーで
-
アクセス クエリを別のファイ...
-
vbsでファイルやフォルダのコピ...
-
マインクラフトPCをプレイしよ...
-
エクセル2010、図が大きすぎま...
-
現在のブックを閉じないで、マ...
-
開いている別のファイルにExcel...
-
FTPとファイルコピーの違いにつ...
おすすめ情報