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ランキング
-
fopenでファイル名に、変数を使...
-
c言語でのfscanfについて
-
ガンマ変換 C言語でプログラ...
-
VisualStudioでのファイルの入...
-
構造体のメンバにファイルポイ...
-
日本語ファイル名のFTPについて
-
「コマンドライン引数チェック...
-
C言語でファイル読み書きを早く...
-
ADボードでリアルタイムサンプ...
-
fread()エラー
-
c言語による画像処理について
-
OpenGLによる描画内容をBMP出力
-
C言語の課題です
-
fscanfで格納された変数がおか...
-
C言語でクロマキー合成をする方法
-
ファイルが読み込めない・・・
-
容量の大きいCSVファイルの読み...
-
C言語でファイルの内容を strto...
-
エラーがわかりません、、
-
バイナリファイルの読み込み(C...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ガンマ変換 C言語でプログラ...
-
c言語でのfscanfについて
-
なぜCSQとCIP形式ではコ...
-
複数ファイルの同時読み込みの...
-
fopenでファイル名に、変数を使...
-
ファイル出力で改行を入れたい!
-
ファイルへの書込み処理が異常...
-
【C言語】ファイルを読み込んで...
-
エラーがわかりません、、
-
C言語でセグメンテーションエ...
-
C言語でファイル読み書きを早く...
-
テキストファイル内に対して, ...
-
fgets( ) の返り値は何?
-
ファイルに行番号を追加
-
OpenGLによる描画内容をBMP出力
-
fscanfでループしてしまう。
-
c言語 ファイルから数字を読み...
-
ファイルが読み込めない・・・
-
CRC32の計算方法
-
CSVファイルの内容を構造体に格...
おすすめ情報