Windows コマンドラインプログラムを作っています。エラーになるため教えてください。


#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp;
char str[256];
char *para;
fp=fopen(argv[1],"r");
while(!feof(fp)){
fgets(str,256,fp);
printf("%s",str);
}
getchar();
return 0;
}

上記のプログラムをコンパイルすると以下のエラーがでます。どうすればいいのでしょうか?

error C2664: 'fopen' : 1 番目の引数を '_TCHAR *' から 'const char *' に変換できません。

そこで
fp=fopen((char *)argv[1],"r");
と書き換えるとエラーは消えますが実行時に引数の1文字目しか代入されていません。

たとえば

progame名 abcdef.txt
とすると((char *)argv[1]にはaしか入っていません。

どうすればいいでしょうか。教えてください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/10/12 23:17:58
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:Bookmarker No.1

回答回数191ベストアンサー獲得回数34

ポイント60pt

Unicode/ANSI アプリケーションをコンパイル時に切り替えるようにするのなら、「_t*」関数(マクロ)を一貫して使わないといけません。

fopen -> _tfopen 

fopen、_wfopen (CRT)

  • id:mai_mai_mail
    開発環境はVC2005です。
  • id:Vacuum
    UNICODE(UTF16) は半角文字でも2バイト使います。
    abc は 0x610062006300 となりますので1文字にしか見えないんですねぇ。コンソールアプリであればANSIでいいのではと思うのですが。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません