###前提・実現したいこと
初めて質問します。
Visual Studio 2015 Community を使ってC言語の学習をしている初学者です。
C言語の入門書を用いてサンプルプログラムを実行しています。
ファイルへの書き込みを学んでいますがエラーが出て動きません。
どうやら fopen が非推奨になり fopen_s を使わなければならなくなったためと思われます。
インターネットで検索してもよく分かりませんでした。
何が起きておりどのように対策をすればよいかを教えてください。
###発生している問題・エラーメッセージ
out1.txtに関する動作は正常に動くのですが
(フォルダがなければ "dir1\out1.txtが作成できません"と表示され、フォルダがあれば正しくファイルが生成されます。)
out2.txtに関する動作になるとエラーが出ます。
以下は Visual Studio の出力のデバッグ欄に表示されたメッセージです。
File: minkernel\crts\ucrt\src\appcrt\stdio\output.cpp Line: 31 Expression: stream != nullptr For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.
###該当のソースコード
C
1#include "stdafx.h" 2int main(){ 3 FILE *FP; 4 errno_t err; 5 6 err = fopen_s(&FP, "dir1\\out1.txt", "w"); 7 if (FP == NULL) { 8 printf("dir1\\out1.txtが作成できません\n"); 9 return -1; 10 } 11 else { 12 printf("ファイル書き込み成功\n"); 13 fprintf(FP, "0123456789\n"); 14 fclose(FP); 15 } 16 17 if ((err = fopen_s(&FP,"dir2\\out2.txt", "w")) == NULL) { 18 printf("dir2\\out2.txtが作成できません\n"); 19 return -1; 20 } 21 else { 22 printf("ファイルに書き込み成功\n"); 23 fprintf(FP, "ABCDEFG\n"); 24 fclose(FP); 25 } 26 27 printf("プログラムを終了するには何かキーを押してください..."); 28 char x; 29 scanf_s("%c", &x); 30 return 0; 31}
また、これはサンプルプログラムを写してエラーが出たため、インターネットで調べて書き換えたものです。
サンプルプログラムでは
c
1 if ((err = fopen_s(&FP,"dir2\\out2.txt", "w")) == NULL) {
は
c
1if((FP=fopen("dir2\\out2.txt","w"))==NULL){
となっています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/17 11:38
2016/08/17 12:42
2016/08/17 13:06