![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- 営業・販売・サービス FP無料相談サービスの営業電話がきて、お金は一切かからないと言われたので指定されたカフェを訪問したら 2 2022/12/22 21:52
- Perl perlのflock関数でロックをかけたままopen関数で何度もファイルを開きなおすことはできますか 3 2023/05/01 22:25
- 公認会計士・税理士 FPの勉強って公認会計士と関係ありますか? 1 2023/01/23 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーがわかりません、、
-
C言語を用いて、csvファイル内...
-
ガンマ変換 C言語でプログラ...
-
csvファイルのデータを構造体に
-
#define _CRT_SECURE_NO_WARNIN...
-
ファイルが読み込めない・・・
-
C言語でのCSVソートとデータ抽...
-
fopenでファイル名に、変数を使...
-
セグメンテーションエラーです
-
ファイルへの書込み処理が異常...
-
ファイル出力で改行を入れたい!
-
fgets( ) の返り値は何?
-
ライブラリ関数と同名のメンバ関数
-
fopen用の関数を作りたいです。
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
-
Enterキーを押されたら次の処理...
-
信頼区間の1.96や1.65ってどこ...
-
C言語での引数の省略方法
-
c languageで 簡単な質問があ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
C言語でセグメンテーションエ...
-
C言語でファイル読み書きを早く...
-
ファイル出力で改行を入れたい!
-
エラーがわかりません、、
-
テキストファイル内に対して, ...
-
構造体のメンバにファイルポイ...
-
C言語にてXMLファイルから任意...
-
ガンマ変換 C言語でプログラ...
-
【C言語】ファイルを読み込んで...
-
日本語ファイル名のFTPについて
-
fscanfでループしてしまう。
-
CRC32の計算方法
-
fgets( ) の返り値は何?
-
VisualStudioでのファイルの入...
-
ファイルに行番号を追加
-
ファイルへの書込み処理が異常...
-
ファイルが読み込めない・・・
おすすめ情報