c言語のファイルを開くプログラムを作ってコンパイルしたら、
「C4047: '=': 間接参照のレベルが 'FILE *' と 'errno_t' で異なっています。」とでてエラーが出ました。どうすればエラーがなくなりますか?
#include <stdio.h>
#include <string.h>
main()
{
FILE *fp; // FILE型構造体
char fname[] = "test.dat";
int Index = 0;
/* ファイルのオープン */
fp = fopen_s(&fp, fname, "r");
if (fp == NULL) {
printf("%sファイルを開けません\n", fname);
return 0;
}
else {
printf("%sファイルを開いた!!\n", fname);
}
/* ファイルのクローズ */
if (fclose(fp) != 0) {
perror("ファイルのクローズに失敗しました\n");
}
else {
printf("ファイルを正常にクローズしました\n");
return 0;
}
}
解決方法がわかる方たすけてください。
お願いします。
間接参照のレベルが異なっていてエラーが出ました。。わかる方助けてください!!
Re: 間接参照のレベルが異なっていてエラーが出ました。。わかる方助けてください!!
fopen_s() の返却値は errno_t です。
警告メッセージの通り型が違います。
このままでは、fp を上書きしてしまうのでダメですね。
以下のようにすればいいと思います。
警告メッセージの通り型が違います。
このままでは、fp を上書きしてしまうのでダメですね。
以下のようにすればいいと思います。
#include <stdio.h>
#include <string.h>
main()
{
FILE *fp; // FILE型構造体
char fname[] = "test.dat";
int Index = 0;
/* ファイルのオープン */
//fp = fopen_s(&fp, fname, "r");
errno_t err = fopen_s(&fp, fname, "r"); //fopen_s の戻り値は errno_t
//if (fp == NULL) {
if (err != 0) {
printf("%sファイルを開けません - ", fname);
perror(NULL); //エラーの理由を stderr に出力
return 0;
} else {
printf("%sファイルを開いた!!\n", fname);
}
/* ファイルのクローズ */
if (fclose(fp) != 0) {
perror("ファイルのクローズに失敗しました\n");
} else {
printf("ファイルを正常にクローズしました\n");
return 0;
}
}