公式アカウントからの投稿が始まります

あるプログラムの実行結果、例えば以下のようなプログラムにおける「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件)

fprintf(file,"Hello World");


でいいんじゃないでしょうか。
    • good
    • 0

printf の前に freopen で stdout をすりかえる.


https://www.cplusplus.com/reference/cstdio/freop …

というのはさておきふつうは #2 で指摘されているようにリダイレクトするんだろうなぁ.... Linux が C の「総本山」という記述には異議を唱えておくけど.
    • good
    • 0

ファイルへの上書きなら、fprintfを使えば大丈夫です。



#include <stdio.h>

int main(void)
{
FILE *file;
file = fopen("copy.txt","w");
fprintf(file,"Hello World\n");
fclose(file);
return 0;
}
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2021/10/04 10:40

> あるプログラムの実行結果、例えば以下のようなプログラムにおける<中略>を別のファイル(例えば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の機能使ってスクリプトでっち上げられた方が実は実用的なのです。

・・・・何かヘンな学校の宿題でもなければ、ね。
    • good
    • 0

テキストファイルの書きたいだけなら、ググればサンプルは見つかると思います。



例えばこんなのとか。
https://webkaru.net/clang/file-append/

ようは、書き込み可能でオープンしたファイルに fprintf する感じです。

/* 入力した文字列をファイルに書き込む */
fprintf(file, "%s", ch);
    • good
    • 0

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