あるプログラムの実行結果、例えば以下のようなプログラムにおける「Hello World」
#include <stdio.h>
int main(void) {
printf("Hello World\n");
return 0;
}
を別のファイル(例えばcopy.txt)に上書きするようなプログラムを作りたいです。
下のプログラムの応用なのですが、、、
#include <stdio.h>
int main(void)
{
FILE *file;
file = fopen("test.txt","w");
fclose(file);
return 0;
}
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
printf の前に freopen で stdout をすりかえる.
https://www.cplusplus.com/reference/cstdio/freop …
というのはさておきふつうは #2 で指摘されているようにリダイレクトするんだろうなぁ.... Linux が C の「総本山」という記述には異議を唱えておくけど.
No.3
- 回答日時:
ファイルへの上書きなら、fprintfを使えば大丈夫です。
#include <stdio.h>
int main(void)
{
FILE *file;
file = fopen("copy.txt","w");
fprintf(file,"Hello World\n");
fclose(file);
return 0;
}
No.2
- 回答日時:
> あるプログラムの実行結果、例えば以下のようなプログラムにおける<中略>を別のファイル(例えばcopy.txt)に上書きするようなプログラムを作りたいです。
>下のプログラムの応用なのですが、、、
なに?マジレスしていいのかしら?
フツーはね、「そんなプログラムを作ろうとは思わない」ってのが答え。
何故なら、一つのプログラムの出力を別のファイルに「書き込む」ってのは、ぶっちゃけ、「プログラムのお仕事」じゃなくって「OSのユーティリティのお仕事」なんだよな。
だから、プログラムに詳しい≒OSの使い方に詳しい、んで、詳しければ詳しい程、言い方悪いんだけど
「そんなバカなプログラムを作ろう」
だなんて夢にも思わないんだよ。何でOSに命令すれば簡単に出来る事をわざわざプログラムに書くんだ?ってなっちゃう。
彼ら達人は、そもそも「車輪の再発明」(既にあるプログラムを新しく書く事)を嫌うんだ。
例えば貴方がやりたい事はUNIX/Linuxって言うCの総本山なOSでは、貴方が書いたHelloWolrdプログラムをhello.cとして、helloと言う実行形式を得たとすると、
./hello > copy.txt
と端末に一行打つと終わる作業なんだよね。
UNIX/Linux上の端末で'>'と言う記号は「リダイレクト」って言うんだけど、
リダイレクトの基本:
https://linux.keicode.com/commands/redirect-basi …
「リダイレクトというのは、標準の入出力を使うのではなく、他の入出力に切り替えることをいいます。」
と言う上の文章見ると、貴方がやりたい、「出力をテキストファイルへと切り替える」のと全く同じ機能なんだよね。
貴方がそのプログラムを書こうとすると何行で書く?例示は既に9行だよね。今後もっと増えるでしょ。
一方、OS使えば1行で済む。
熟練プログラマがどっちをやるか、っつーと分かるよね?
「自分でそんなプログラムは書かない」
明らかにラクの方を選ぶし、彼らが熟練プログラマだ、って事はOSの機能を良く知ってるってこった。だから「同じ機能のプログラムは絶対に書かない」。
書いても、Windowsで言うトコのバッチファイル作るかスクリプト作る程度だよね。
テキストファイルに上で書いた
./hello > copy.txt
を記録しておいて、端末でそのテキストファイルを起動する方を選ぶでしょ。
と言うわけで、マジレスは以上です。
「そんなプログラムを書くのにアタマ悩ませるんだったらOS(例えばWindowsのPowerShell)のコマンドを調べてスクリプト書いた方が、後々の為を考えても良い」
って事ですね。
C言語で何か作る前にまずはOSの機能使ってスクリプトでっち上げられた方が実は実用的なのです。
・・・・何かヘンな学校の宿題でもなければ、ね。
No.1
- 回答日時:
テキストファイルの書きたいだけなら、ググればサンプルは見つかると思います。
例えばこんなのとか。
https://webkaru.net/clang/file-append/
ようは、書き込み可能でオープンしたファイルに fprintf する感じです。
/* 入力した文字列をファイルに書き込む */
fprintf(file, "%s", ch);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- 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言語 3 2022/10/04 15:07
- C言語・C++・C# c言語 5 2023/04/27 13:20
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ライブラリ関数と同名のメンバ関数
-
C言語にてXMLファイルから任意...
-
エラーがわかりません、、
-
辞書順にソートしたいのですが...
-
csvファイルのデータを構造体に
-
c言語でのfscanfについて
-
#define _CRT_SECURE_NO_WARNIN...
-
fscanfで格納された変数がおか...
-
fscanfでループしてしまう。
-
大量の入力ファイルを扱うとき...
-
ガンマ変換 C言語でプログラ...
-
fopenでファイル名に、変数を使...
-
ファイルが読み込めない・・・
-
C言語でのCSVソートとデータ抽...
-
テキストファイル内に対して, ...
-
ファイル出力で改行を入れたい!
-
fgets( ) の返り値は何?
-
fopen用の関数を作りたいです。
-
信頼区間の1.96や1.65ってどこ...
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
C言語でセグメンテーションエ...
-
C言語でファイル読み書きを早く...
-
ファイル出力で改行を入れたい!
-
エラーがわかりません、、
-
テキストファイル内に対して, ...
-
構造体のメンバにファイルポイ...
-
C言語にてXMLファイルから任意...
-
ガンマ変換 C言語でプログラ...
-
【C言語】ファイルを読み込んで...
-
日本語ファイル名のFTPについて
-
fscanfでループしてしまう。
-
CRC32の計算方法
-
fgets( ) の返り値は何?
-
VisualStudioでのファイルの入...
-
ファイルに行番号を追加
-
ファイルへの書込み処理が異常...
-
ファイルが読み込めない・・・
おすすめ情報