fopen_s関数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
YYSS
記事: 125
登録日時: 14年前
連絡を取る:

fopen_s関数について

#1

投稿記事 by YYSS » 14年前

C++で、fopen関数を使うと警告が出てしまいます・・・
warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

コード:

    char fname[32]	= {"stage\\Stage1.csv"};
   	//ファイル読み込み
	fp	= fopen( fname, "r" );
	if( fp == NULL ){
            printfDx("read error\n");
            return;
    }
#pragma warning ( disable : 4996 )
で警告を消すことは出来たのですが、調べたところ「fopen_s」という関数を使うのが良いとのことなので
http://msdn.microsoft.com/ja-jp/library ... 80%29.aspx

コード:

 
   char fname[32]	= {"stage\\Stage1.csv"};
   	//ファイル読み込み
    if( fopen_s( &fp, fname, "r" ) == NULL ){
            printfDx("read error\n");
            return;
    }
とやると、今度は読み取ることが出来なくなってしまいました。

ゲーム製作程度なら、fopenを使って警告を消しても問題ないのでしょうか?

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: fopen_s関数について

#2

投稿記事 by h2so5 » 14年前

fopen_s および _wfopen_s で開かれたファイルは共有できません。ファイルを共有する必要がある場合には、適切な共有モード定数 (たとえば、読み取り/書き込み共有の場合は _SH_DENYNO) で _fsopen、_wfsopen を使用します。
とMSDNには書かれているので、_fsopen()を試してみたらどうでしょうか。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: fopen_s関数について

#3

投稿記事 by softya(ソフト屋) » 14年前

fopen_sとか_fsopenの類は、マイクロソフト独自の非標準関数です。
少し安全性が上がる代わりにC言語としては非標準となりますので、bccやgccでコンパイルできなくなります。
マイクロソフトの余計なおせっかいなので無視しても構いません。

過去ログ参考。
http://dixq.net/forum/viewtopic.php?t=6019&p=51296
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
YYSS
記事: 125
登録日時: 14年前
連絡を取る:

Re: fopen_s関数について

#4

投稿記事 by YYSS » 14年前

標準じゃない関数を使うのは気が引けるので結局、
fopenを使用して、毎回Warningが出るのも嫌なので・・・

#pragma warning(disable:4996)

で解決?しました。

標準関数で警告を出すのは止めて欲しいです;;
解決するのに無駄に時間がかかってしまいます;;

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: fopen_s関数について

#5

投稿記事 by ISLe » 14年前

fopen_sの戻り値はエラーコードなので正常終了で0が返ります。
NULLはC++で0と定義されています。

#bccやgccが非標準をデフォにしてるところがあっても非難されないのは黙ってこっそりやってるからですかね。

閉鎖

“C言語何でも質問掲示板” へ戻る