
No.1ベストアンサー
- 回答日時:
あーそれは、
----
main(){
FILE *fp;
F_open(fp);
fprintf(fp,"aaa\n");
}
-----
の「fp」と、
-----
void F_open(FILE *fp){
fp=fopen("aa.txt","w");
}
-----
の「fp」がつながってないからです。
「F_openからmainにファイルポインタを渡す」必要があるのに、このプログラムでは、
「mainからF_openにファイルポインタを渡す」ことをしています。
対処策は、全部教えることになってしまいますが、
#include<stdio.h>
FILE * F_open(void);
main(){
FILE *fp;
fp = F_open(fp);
fprintf(fp,"aaa\n");
}
FILE * F_open(void){
return fopen("aa.txt","w");
}
とすれば動くはずです。
しかしそれよりも、ここで
F_open()関数を導入する意味はなく、
fopen関数をそのまま使った方が簡単だと思いますが?
(このあと機能を付け加えるというのならまた別です)
回答ありがとうございます。
そのほうほうだとうまくいきました。
でも申し訳ないのですが、返り値としてファイルポインタを返さないでやる方法はないでしょうか?
実際は
void F_open(FILE *fp,int flag){
switch(flag){
case 1:
fp=fopen("test.txt","w");
break;
case 2:
fprintf(fp,"aaa\n");
break;
case 3:
fclose(fp);
break;
}
のような関数にしたいと思っています。
こういう関数は現実的に不可能なんでしょうか?
No.3
- 回答日時:
今どき、C++に対応していないコンパイラを使っていることはないだろうから、C++限定でもう一つの答えを載せておきます。
C++なので、拡張子を*.cppにしてからコンパイルしてください。さもないとコンパイルエラーです。
void F_open(FILE **fp);
main(){
FILE *fp;
F_open(fp);
fprintf(fp,"aaa\n");
}
void F_open(FILE*& fp){
fp = fopen("aa.txt","w");
}
ポインタの参照渡しです。私的にはダブルポインタよりこっちの方が好きです。
なぜかというと、
> fp = fopen("aa.txt","w");
の部分を、main()関数側の
> F_open(fp);
と置き換えてそのまま動作するからです。
No.2
- 回答日時:
以下のようにする方法もあります。
void F_open(FILE **fp);
main(){
FILE *fp;
F_open(&fp);
fprintf(fp,"aaa\n");
}
void F_open(FILE **fp){
*fp=fopen("aa.txt","w");
}
サブ関数→コール元関数 へ引数で値を返すためには、
コール元関数側の変数のアドレスをサブ関数へ渡し、
そのアドレスに値を設定して返します。
回答ありがとうございます。
-izayoi-さんの方法で解決することができました。
ダブルポインタ?っていうやり方もあるんですね。
聞いたときはあるけど使ったことがありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルからの全文読み込み
-
バイナリファイルでの時刻表示
-
ファイルに行番号を追加
-
fopenでファイル名に、変数を使...
-
C言語を用いて、csvファイル内...
-
c言語 ファイルから数字を読み...
-
テキストファイル内に対して, ...
-
乱数とファイルの入出力の質問...
-
クリップボードから画像取得
-
ファイルを読み込んだ時に同じ...
-
初心者のc言語
-
[C言語]2つのファイルを用いた...
-
2÷3などの余りについて
-
「Aに対するBの割合」と「Aに対...
-
20'(角度)の計算がわかりま...
-
Enterキーを押されたら次の処理...
-
C言語での引数の省略方法
-
有効数字について 以前質問をし...
-
10個出力で改行したいのですが...
-
#if 1 #elseの意味について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
c言語でのfscanfについて
-
隣接行列を読み込んで有向グラ...
-
ファイル出力で改行を入れたい!
-
C言語でファイル読み書きを早く...
-
大量の入力ファイルを扱うとき...
-
ファイルへの書込み処理が異常...
-
fopenでファイル名に、変数を使...
-
fgets( ) の返り値は何?
-
日本語ファイル名のFTPについて
-
C言語 連番データの読み込み
-
テキストファイル内に対して, ...
-
InternetReadFileを使ったファ...
-
CRC32の計算方法
-
テキストファイルをバイナリフ...
-
ガンマ変換 C言語でプログラ...
-
C言語でのCSVソートとデータ抽...
-
漢字を配列に入れたいのですが
-
エラーがわかりません、、
-
fscanfでループしてしまう。
おすすめ情報