重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

いつもお世話になっております。
現在ファイルの作成、入力について勉強しています。

FILE *maketxt;
maketxt = fopen("C:\~\~\~.txt",w+);

上の状況でファイルの作成は出来るようになりましたが、
更にファイル名をfopen関数の外に定義したいと思っています。
というのもファイル名にタイムスタンプを入れたいためで、ためしに以下のようにやってみてもできませんでした。(タイムスタンプに関しては事前にlocaltime関数で定義済み)

fprintf(text,C:\~\~\%d.txt,tm_sec);
maketxt = fopen("text",w+);

うまい書き方をご存知の方、ご教授お願いいたします。

A 回答 (6件)

関数と文字列の使い方が間違ってます。


fprintfはファイルに文字列データを書き出すための関数。要するにテキストファイルを作成するための関数です。

No.1さんの様に書くのが正解です。
注意点を幾つか。

1.C:\~\~\%d.txt
文字列なら"で囲まないとダメ。
\マークはエスケープなので、\を文字としたいときは\\と書く。
なので、文字列に関して復習をしたほうが良いですよ。

2.変数と文字列の出鱈目。
fprintf(text,C:\~\~\%d.txt,tm_sec);
maketxt = fopen("text",w+);
これを見るとtextは変数名。"text"は文字列ですが同列に扱っている様に見えます。変数の型と定数の型の復習をしましょう。
あとは関数の
FILE *fopen(
const char *filename,
const char *mode
);
と書かれているプロトタイプの意味を理解する必要があります。

3.tm_secは秒だけだけど良いの?
本当は、日時にしたいのでは?
    • good
    • 0
この回答へのお礼

詳しくありがとうございます。
型についていまいち理解しきれておらず…まだまだ勉強不足です。

1はこちらに書く際の記述ミス、3は記述を簡略するためあえて秒だけ記述しました。別場所でYYYYMMDDhhmmssに変換しているので大丈夫です。

お礼日時:2009/02/18 20:48
    • good
    • 0
この回答へのお礼

ご紹介ありがとうございます。

お礼日時:2009/02/20 11:54

標準で用意されてるのに perror() というのがあります。


エラーメッセージが出てくれますので試してみてください。

maketxt = fopen(省略);
if(makeext == NULL) { /* エラーだよ */
 perror("fopen error ... why? : ");
 /* return -1; とかなんとか */
}
    • good
    • 0
この回答へのお礼

そんな関数もあるのですね。ありがとうございます。
今後使ってみたいと思います。

お礼日時:2009/02/18 20:56

>maketxt = fopen("C:\~\~\~.txt",w+);


>maketxt = fopen("text",w+);

fopen()の第2引数の方が合わないのでコンパイルエラーかと。
そのまえに変数wがあるか…というのもありますが。

# 単なる記述ミス…でしょうけどね。
    • good
    • 0
この回答へのお礼

こちらへ記述する際のミスです、すみません。
maketxt = fopen("C:\~\~\~.txt","w+");
と書くべきですね。
ご指摘ありがとうございます。

お礼日時:2009/02/18 20:54

ちなみに, しばしばパスの区切りは / でよかったりします.

    • good
    • 0
この回答へのお礼

豆知識ありがとうございます。
ぜひ使ってみます!

お礼日時:2009/02/18 20:50

Cはあまりやらないので自信はありませんが、fprintfの使い方を間違っていると思います。



char filepath[256];
sprintf(filepath, "C:\\~\\~\\%d.txt", tm_sec);
maketxt = fopen(filepath, "w+");
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございます。
fprintfやらfwprintfやらsprintfやら…出力の関数がたくさんあってわからなくなってしまいます;
教えていただいたとおりにやるとうまくできました!

お礼日時:2009/02/18 20:43

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