char型変数をLPCTSTR型に変換する方法は?

このQ&Aのポイント
  • 外部ファイルの文字列をchar型変数に取り込み、それをLPCTSTR型に変換する方法を教えてください。
  • 現在、char/THCARの変換が正しくできず困っています。開発環境はVisualStudio2010で、MFC作成(Unicode文字列)です。
  • wsprintf()で変換する時点で文字列がおかしくなってしまい困っています。マルチバイト文字列を使用しない解決方法はありますか?
回答を見る
  • ベストアンサー

char型変数をLPCTSTR型に変換したい

大学の研究でプログラム作成している者です. 現在外部ファイルの文字列をfscanf()でchar型変数に取り込み,それをLPCTSTR型変数に変換して,関数に引数として渡そうとしてます. しかし,現在はchar/THCARの変換が正しくできず困っております.現在のコードは以下のような流れになってます. ----------------------------------------------- char name[MAX_PATH]; TCHAR name_t[MAX_PATH]; fscanf( &fp, "%s", name ); wsprintf( name_t, _T("%s"), &name ); // char ⇒ TCHAR makedFunction( name_t ); // 自作関数(引数はLPCTSTR) ----------------------------------------------- しかし, wsprintf()で変換した時点で,文字列がおかしくなってしまい困ってます. 開発環境はVisualStudio2010で,MFC作成(Unicode文字列)となってます.ちなみにマルチバイト文字列を使用する解決方法はなしとします. 解決方法をご存知の方がおられましたら,是非とも,ご回答よろしくお願い致します.

質問者が選んだベストアンサー

  • ベストアンサー
  • unacyo
  • ベストアンサー率51% (35/68)
回答No.1

wsprintf()は入出力がワイド文字専用なので、入力にマルチバイトコードを渡しても正常に動きません。 おそらく、コード変換を意図しているものと思います。 コード変換で簡単なのは、setlocale()とmbstowcs()の組み合わせかと思います。 fscanf(); //中身省略 setlocale( LC_ALL, "ja_JP" ); mbstowcs( name_t, (const char *)name, strlen( name ) ); makedFunction( name_t ); mbstowcs()の仕様は、MSDN等を見てください。 他には、MultiByteToWideChar()というものもあり、同じ様なことができます。 ところで、なんでfscanfの第一パラメータが&fpなのでしょう? FILE* fp = fopen( "ファイル名", "r" )で読み込んでいるのであれば、fpはポインタですから、&は不要ですよね? (単に転載ミスだとは思いますが)

apollograffitti
質問者

お礼

ご回答ありがとうございます. おかげで変換し,目的を達成することが出来ました. fscanfの第一パラメータは自分の転載ミスです.

関連するQ&A

  • 変数の中身を文字列に変換ってできますか?

    void func(int x) {  puts(&&&&&(x)); } こんな風にして、func という関数の引数に1が与えられたら、 putsを実行できるように1を文字列(つまり"1")に 変換してくれる&&&&&(x)という関数あるいは マクロが作成できないでしょうか? この質問をした目的は、変数の値によって、たくさんある ファイルのどれを開くか決定したいという所からきました。 fopen の引数が char *abc なんですもの。

  • DWORDとcharの変換

    突然ですが、DWORD*がたの文字列をchar*がたの文字列に変換する方法ってありますか? あれば関数名など教えていただけると助かります。 いそいでいます。お願いしますm(_ _)m

  • char型とstring型について

    char型とstring型について質問があります。 言語はC++です。 以下の関数があったとします。 void test(string a, string b string c){ 処理 } この関数を下記のように利用した場合について質問があります。 a.引数に直接文字列を挿入したケース test("aaa","bbb","ccc") b.変数に文字列を設定し、変数を引数にしたケース string a="aaa" string b="bbb" string c="ccc" test(a,b,c) (1)はコンパイルエラーになり、(2)は成功しました。 同じ様に見えるのですが、何が違うのでしょうか? また、関数の引数の型をchar*にした場合、(1)(2)のケースでコンパイルが通りました。char*型だと何が違うのでしょうか?

  • char型の文章をconst char*型に変換

    Visual C++ MFCでアプリケーション作成している者です。 現在、エディットコントロールに入力したファイルパスを取り込んで、ファイルのデータ読み込みをおこなうプログラムを作成しております。 しかし、当方プログラムの型など細かいことがあまりわからないため、目的が達成できず困っていたので、この場をお借りして質問しました。 コードの感じは以下のようになっております。 ------------------------------------------ TCHAR FPath;  // ファイルパスが入る FILE *fp; m_edit.GetWindowText( FPath, MAX_PATH ); // m_edit:エディットコントロールのメンバ変数 fopen_s( &fp, [FPathのconst char*], "r" ); ------------------------------------------- char型からconst char型へ変換できればいいのですが、ちょっとよくわからず… ご回答、宜しくお願い致します。

  • System::String->char*変換でき

    C++/CLIでSystem::String^文字列をchar*に変換する関数を書いたのですが、256文字以上の文字列を投げて、戻値を確認してみると、255文字分しか中身が詰まっていません。元の文字列はアスキーのみです。 #include <msclr/marshal.h> using namespace msclr::interop; static char* toPtChar(const String^ Text) { String^ temp = (String^)Text; msclr::interop::marshal_context^ context = gcnew msclr::interop::marshal_context(); char* res = ((char*)(context->marshal_as<const char*>(temp))); return res; } この関数をどのように変更すれば、256文字以上変換できるでしょうか?

  • 'const char *' 型は 'char *' 型に変換できない ??

    Case 1 Text9.Text = "AB"; Text10.Text = "A"; // 1文字目 Text11.Text = "B"; // 2文字目 case 2; Text9.Text = "Ab"; Text10.Text = "A"; Text11.Text = "b"; case 3; Text9.Text = "aB"; Text10.Text = "a"; Text11.Text = "B"; case 4; Text9.Text = "ab"; Text10.Text = "a"; Text11.Text = "b"; 上記のようなCase 文を C を使って作成したいのですが, A~J の大文字とa~jまでの小文字をつかって,2文字の文字列をつくるとき, 1文字目と2文字目が,形態も名称も異なる文字列(例 AB , Ab aB, ab, AC, Ac aC ac, ...)のcase文をつくりたいのですが, 'const char *' 型は 'char *' 型に変換できないというエラーメッセージがでてしまいます.下記プログラムをどう直せばいいかおしえてください. #include <stdio.h> #define MAX_NAME 256 int main(void) { const char *NAME12 = "Text9"; const char *NAME1 = "Text10"; const char *NAME2 = "Text11"; const char *ALPH = "ABCDEFGHIJabcdefghij"; FILE *fp = NULL; char f_name[MAX_NAME]; int count = 0; char *p = ALPH; char *q = ALPH; printf("ファイル名:"); scanf("%s", f_name); fp = fopen(f_name, "w"); if (fp == NULL) { printf("'%s':ファイルが見つかりません\n", f_name); } else { for (p = ALPH; *p != '\0'; p++) { for (q = ALPH; *q != '\0'; q++) { if (*p != *q) { count++; fprintf(fp, "Case %d\n", count); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME12, *p, *q); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME1, *p, *q); fprintf(fp, "%s.Text = \"%c%c\"\n", NAME2, *p, *q); } } } fclose(fp); } return 0; }

  • charからLPTSTRへの変換方法

    リストコントロールにchar型の変数の値を数値として表示させたいのですが、charからLPTSTRへの洗練された変換方法がよくわからないです。 char tempChar; CString tempString; tempString.Format("%s", tempChar); LPTSTR lpsz = new TCHAR[tempString.GetLength()+1]; _tcscpy(lpsz, tempString); こんなプログラムを考えてみたのですが、汚いような気がします。もっと簡単で洗練された変換方法はないのでしょうか?

  • 1ByteのChar型変数を文字列として扱いたい

    1Byteのchar型変数に入ってる値を文字列として扱う方法を教えて下さい Char a; a=30; この30を文字列として出力したいのです 期待している出力:30 判る方、よろしくお願いします

  • wsprintfで実数値を文字列にしたい

    ダイアログボックスの「edit」部分にセットしようと思ったのですが SetDlgItemIntが整数しか使えないので変換したいです。 TCHAR buf[20]; wsprintf(buf, "%.1f", temperature); と書きましたがconst char * の引数LPCWSTRのパラメータと互換性がありませんと出てしまいます。

  • ポインタ

    字列2つを入力し,同じ文字列かどうかを判定するプログラム ポインタの操作で文字列の比較を実現する。 (ライブラリ関数 strcmp を仕様しない) 関数の中身が上手に実現出来ません。 文字列を指すポインタ変数 2 つを引数に取り,同じ文字列なら -1 を,異なる場合は先頭から一致した文字数 を返す関数 必ず,具体的な解答を提示して下さい。 char str__com(char *s,char *t,int count) { while(*s = *t != '\0'){ if(s != t){ return -1; } if(s == t){ count++; } {s++;t++;} } return -1; }