間接参照のレベルが異なっていてエラーが出ました。。わかる方助けてください!!

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Akatsuki
記事: 4
登録日時: 4ヶ月前

間接参照のレベルが異なっていてエラーが出ました。。わかる方助けてください!!

#1

投稿記事 by Akatsuki » 4ヶ月前

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;
}
}


解決方法がわかる方たすけてください。
お願いします。

Bull
記事: 112
登録日時: 4年前

Re: 間接参照のレベルが異なっていてエラーが出ました。。わかる方助けてください!!

#2

投稿記事 by Bull » 4ヶ月前

fopen_s() の返却値は errno_t です。
警告メッセージの通り型が違います。
このままでは、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;
	}
}


返信

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