"error C2040: 'fp': 'char' は 'FILE *' と間接操作のレベルが異なります" に関する原因と対処

このコンパイルエラーの原因と対処に関して説明します。

スポンサード リンク

Microsoft Visual C++にて以下のソースでコンパイルエラーが発生します:

コンパイルエラーメッセージ:
error C2040: 'fp': 'char' は 'FILE *' と間接操作のレベルが異なります。

ソース(バグ有り):

//パイプを作成し、コマンドを実行するサンプル
#include <stdio.h>

int main()
{
FILE *fp;
//バッファを作成
char buff[256],
//パイプを作成 "r"によりコマンドの標準出力を読み取り
fp=_popen("dir","r");
while(fgets(buff,sizeof(buff),fp)!=NULL)
{
printf("%s",buff);
}
_pclose(fp);
return 0; }


原因:
間接操作に誤りがあります。

対処:
間接操作を見直します。
この例では、char buff[256], の後がコロンではなくカンマになっていた単純なミスでこのエラーが出力されています。

このミスにより、char型とFILE* が間接操作となっています。


ソース(修正済み):

//パイプを作成し、コマンドを実行するサンプル
#include <stdio.h>

int main()
{
FILE *fp;
//バッファを作成
char buff[256];
//パイプを作成 "r"によりコマンドの標準出力を読み取り
fp=_popen("dir","r");
while(fgets(buff,sizeof(buff),fp)!=NULL)
{
printf("%s",buff);
}
_pclose(fp);
return 0; }

スポンサード リンク



[コンパイルエラーコード、メッセージに戻る]