Visual Studioはfopenについて不平を言っています。変更するための適切な構文が見つかりません。私が持っています:
FILE *filepoint = (fopen(fileName, "r"));
に
FILE *filepoint = (fopen_s(&,fileName, "r"));
最初のパラメーターの残りは何ですか?
fopen_s
はfopen
の "secure"バリアントで、モード文字列用のいくつかの追加オプションと、ストリームポインターとエラーを返すための別の方法がありますコード。 Microsoftによって発明され、C標準に組み込まれました。C11標準の最新ドラフトの付録K.3.5.2.2に文書化されています。もちろん、Microsoftのオンラインヘルプに完全に文書化されています。 Cの出力変数にポインターを渡す概念を理解していないようです。この例では、filepoint
のアドレスを最初の引数として渡す必要があります。
errno_t err = fopen_s(&filepoint, fileName, "r");
完全な例を次に示します。
#include <errno.h>
#include <stdio.h>
#include <string.h>
...
FILE *filepoint;
errno_t err;
if ((err = fopen_s(&filepoint, fileName, "r")) != 0) {
// File could not be opened. filepoint was set to NULL
// error code is returned in err.
// error message can be retrieved with strerror(err);
fprintf(stderr, "cannot open file '%s': %s\n",
fileName, strerror(err));
// If your environment insists on using so called secure
// functions, use this instead:
char buf[strerrorlen_s(err) + 1];
strerror_s(buf, sizeof buf, err);
fprintf_s(stderr, "cannot open file '%s': %s\n",
fileName, buf);
} else {
// File was opened, filepoint can be used to read the stream.
}
C99に対するMicrosoftのサポートは不格好で不完全です。 Visual Studioは有効なコードに対して警告を生成し、標準だがオプションの拡張機能の使用を強制しますが、この特定のケースではstrerrorlen_s
をサポートしていないようです。詳細については、 MSVC 2017ではC11 strerrorlen_s関数がありません を参照してください。