質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1219閲覧

ファイル操作関数fclose()のエラーの原因を知りたいです.

python_beg

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2023/01/09 12:14

編集2023/01/09 12:59

前提

C言語でのファイルを扱う操作についての質問です。

FILE*in,*out1,*out2,.....,
char fout1[256],...,
などを定義して,処理したデータを任意のドライブのフォルダにファイルを作成して保存させるものになります

実際に動かしてみるとパスや計算の処理は特に問題はないので,情報保護の観点から簡略してエラーの発生している部分だけ切り取らせていただきます.

実現したいこと

ここに実現したいことを箇条書きで書いてください。
-ファイルの出力を実行させたい.

発生している問題・エラーメッセージ

fclose(out1); で以下のエラーが発生します. ハンドルされない例外が 0x761DD112 (ucrtbase.dll) で発生しました(test.exe 内): 無効なパラメーターを致命的と見なす関数に無効なパラメーターが渡されました。

該当のソースコード

C

1if(i != 0.0){ 2count++; 3sprintf(foutw, "G:\\test\\任意のフォルダやファイル\\%s\\%s\\w\\w_%d.txt", YEAR, FOLDER_NO, count); 4 if((out1 = fopen(fout1, "w")) == NULL ) 5 { 6 fclose(out1); 7 printf("ファイルの作成に失敗\n"); 8 exit(1); 9 } 10 11

試したこと

初期化
FILE*in=0,*out1=0,*out2=0,.....,

補足情報(FW/ツールのバージョンなど)

Visual studio 2019

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/01/09 12:22

コードが部分過ぎて何が起きているのか全く分かりません。 少なくとも、実行すれば同じエラーが発生する状態のコードにしてください。
python_beg

2023/01/09 12:36

申し訳ありません.ソースコードが長すぎるが為記載できず,エラーの発生したfclose()の部分のみ記載させていただきました. コードを全て載せられる方法を見つけましたら記載のほうさせていただきます.
dameo

2023/01/09 12:40

さらに縮めた以下のコードをリリースモードでビルド/実行すれば出ますよ。 #include <stdio.h> int main() { fclose(NULL); return 0; } 原因は常にfopenに失敗してるのにそのファイルポインタをfcloseしようとしているからです。 fopenに失敗した場合(NULLが返った場合)は、fcloseは必要ありません。 参考になりそうにない公式ドキュメントは↓ https://learn.microsoft.com/ja-jp/cpp/c-runtime-library/reference/fclose-fcloseall?view=msvc-160
episteme

2023/01/09 12:57

> if((outw = fopen(fout1, "w")) == NULL ) ココ↑の outw が out1 の誤記ならば dameo さんのおっしゃる通り。
dameo

2023/01/09 15:17

見間違ってましたね。すみません。今は誤記として修正されてるみたいですけど。
guest

回答2

0

ベストアンサー

ifの条件が満たされた場合、ファイルポインタはNULLのはず。したがってNULLをfcloseの引数にしてしまいますよ。

投稿2023/01/09 14:31

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

fclose()のエラーの原因は、オープンされていないハンドル:out1をfcloseに渡しているからです。
オープンされてないファイルはクローズする必要はありません。(クローズしてはいけません)
以下のようにしてください。

C

1 if((out1 = fopen(fout1, "w")) == NULL ) 2 { 3 printf("ファイルの作成に失敗\n"); 4 exit(1); 5 } 6

投稿2023/01/10 06:49

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問