• 締切済み

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型へ変換できればいいのですが、ちょっとよくわからず… ご回答、宜しくお願い致します。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.3

>char型からconst char型へ変換できればいいのですが、ちょっとよくわからず… char型からconst char型への変換は特に何もする必要ないですけど・・・ ただ問題はそんな事ではなくてC++の基本が出来てなさそうな事だと思います。 例えばchar型とchar *型の区別ついてますか?

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

> TCHAR FPath;  // ファイルパスが入る 入りませんよ。 TCHARは文字列じゃなく「文字」だから。

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

いや、色々まずいでしょう。 MFCを使う人がC++の基本文法をよく分かっていないのは非常に危険です。 バッファ・オーバーランを避けるためにもCStringをお使いください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

  • テキストボックスのファイルパスでfp=open

    C++ Builder2009でプログラムやってます。 テキストボックスEdit2-Textにファイルパスが入っているので、 fp = fopen( Edit2->Text , "wb" ); このようにしてファイル出力を行おうとしたら次のようなエラーが出てきました。 [BCC32 Error] Unit1.cpp(384): E2034 Cannot convert 'UnicodeString' to 'const char *' [BCC32 Error] Unit1.cpp(384): E2342 Type mismatch in parameter '__path' (wanted 'const char *', got 'UnicodeString') エラー内容だと”Edit2-Text”はUnicodeString型なので、fp = fopen にはconst char *っていう型にしないといけないという意味だと思うのですが、fopenでファイルパスをテキストボックスから渡すにはどのようにしたらよいか、ご教授よろしくお願い致します。

  • 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文字列)となってます.ちなみにマルチバイト文字列を使用する解決方法はなしとします. 解決方法をご存知の方がおられましたら,是非とも,ご回答よろしくお願い致します.

  • charからLPTSTRへの変換方法

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

  • VC++2005 型変換

    テキストファイルを開いて、そのファイルの中身をfgetsで読みながらそれを何回か繰り返すというようなことをするというプログラムを書いてます。プログラムは下になります。 int m; FILE* pFile; char buffer[128]; pFile=fopen("p1.txt","r"); pFile=textBox1->Text; if (pFile==NULL) { label1->Text="ファイルがありません。\n"; } for(m=1; m<=8; m++) { fgets(buffer,128,pFile); String^ buffer; buffer=textBox2->Text; } } デバックを行うと次のエラーが出てしまいます。 error C2440: '=' : 'System::String ^' から 'FILE *' に変換できません。 どのように直せばよいのでしょうか?

  • const char*のグローバル変数として使うのはどうしたら良いでし

    const char*のグローバル変数として使うのはどうしたら良いでしょうか? 以下のような動作を実装しようとしています。 mainからデータファイルの値を読み込みます。 その際、読み込むデータファイルのファイル名は別のコンフィグファイルに記載されているので、コンフィグから、データファイルのファイル名を読み込んで、データファイルをオープンする必要があります。 これをファイルを分割して実装しているのですがうまくいきません。 説明のため、データファイル名をmainから出力する実際と同じファイル構成のコードを作成しました。 以下のように5つのファイルに分けています。この際、データファイルのファイル名をconst char* filenameとしています。 ソースファイル #1: main.cpp //util.cppでfilenameに設定されたファイル名を表示する。 ソースファイル #2: set_filename.cpp //グローバル変数であるfilenameにコンフィグファイルに記載されているファイル名を設定する関数が定義されています。 ヘッダファイル #1: etc.h   //filenameの宣言が記載されていて、main.cpp, set_filenameでincludeされている。 ヘッダファイル #2: global.h //filenameの定義が記載されている。 ヘッダファイル #3 : set_filename.h //set_filename.cpp関数のプロトタイプ宣言 このような場合、set_filename.cpp内の関数で設定したfilenameがmain内で違う値に変わってしまいます。下のソースの例では、data.txtと出力されるのが期待値ですが、ゴミ値が表示されます。環境はVisual C++ 2008です。 どうして、set_filenameで設定したファイル名が変わってしまうのでしょうか? また、所望の動作はどのようにソースを変えれば実装できるのでしょうか? サンプルのソースは以下のとおりです。 -----main.cpp---------------- #include "etc.h" #include "global.h" #include "util.h" using namespace std; void main() { ifstream ifs("config.txt"); set_filename(ifs);  //config.txtには「data.txt」と記載しています。 cout<<filename<<endl; } -- ---------set_filename.cpp------- #include "etc.h" #include "util.h" void set_filename(ifstream &ifs) { string temp; ifs>>temp; filename=temp.c_str(); cout<<filename<<endl; ifs.close(); } ---- ---------etc.h----------------- #include <fstream> #include <cstdio> #include <string> #include <iostream> extern const char* filename;  //データファイル名です。 -- ----global.h-------- const char* filename; -- ----set_filename.h--- using namespace std; void set_filename(ifstream &ifs); --

  • ワードのデータ

    FILE *fopen( const char *filename, const char *mode ); を使って、 FILE *fp = fopen("あああ.doc", "rb" ); --- c = fgetc(fp); ----- ---- として、エクセルのファイルデータを メモリーに移そうとしたら、 5文字文くらい読んで、 すぐに終了してしまいます。 1.原因は何でしょうか?   ワードデータの特性でしょうか? 2.他の方法でファイルサイズをはかり   EOF にかかわらず、そのサイズ分だけ読み込めば   データをメモリーに移せるのでしょうか?  よろしくお願いいたします。

  • キャストの仕方(std::stringをconst char*へ)を教えてください。

    c++で作成したものをコンパイルしたところ、 下記のようなエラーメッセージが表示されました。 cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int stat(const char*, stat*) 自分の解釈では、 stat関数の第1引数がconst char*なのに、 プログラムの中では  #include <sys/types.h>  #include <sys/stat.h>  using namespace std;   :  string aaa;   :  struct stat st;  if(stat(aaa,&st)!=-1){・・・   : という感じで記述しているので、 型が変換できない という感じのことを言っているのかなぁ・・・? と思っているのですが、間違いですか? また、間違えていないとしたら・・・、 このstringで宣言しているaaaをchar*(?)にキャストする方法 と言いますか、このエラーを解決する方法を教えてください。 毎度のことですが、理解不十分で、質問の意味が通じにくいかも しれませんが、どうか宜しくお願いいたします。m(_ _)m

  • FILE オープンについて

    いつもお世話になります。 今ファイルデータ検索処理を検討しております。 今、search.txtには、 検索対象となるファイルパスが記載されています。 [search.txt] /home/hoge/SAMPLE1.jpg /home/hoge/SAMPLE2.jpg search.txtをfopen()し、1行ずつfgets()して、 得られるファイルパスより、そのファイルを fopen()して解析する処理がしたいですが、 fgets()より得られたファイルパスをfopen()し、 fread()するとセグメンテーションエラーになります。 どのようにしたらいいのでしょうか? 現状のコードを下記します。 FILE *fp; char *com1 = "/home/hoge/search.txt"; FILE *confp; char buf1[1024]; char buf2[1024]; int i =0; fp = fopen(com1, "r"); while( fgets(buf1, sizeof(buf1), fp )){ confp = fopen(buf1, "rb"); //*.JPGファイルをオープン //下記fread()でセグメンテーションエラー size_t size = fread( buf2, sizeof(char), 1024, confp ); for( i = 0; i<1024; i++ ){ if( (buf2[i] == 0xff) && (buf2[i+1] == 0xe0) ){ printf("%02x\n",buf[i+5]); } } } fclose(fp); fclose(confp); 上記のように、search.txtをfopen()し、読み込んだファイルパスを fopen()して、fread()読み込みをする方法を 教えて下さい。 どうぞよろしくお願い致します。

  • C++/CLIにて、System.String^型からChar*への変換。または、fopen_s以外のファイル出力方法

    現在、VisualC++2005の「空のCRLプロジェクト」からコツコツプログラムを組んでいます。 ファイルを読み込む→処理→他のファイルに結果を出力という単純なプログラムなのですが、入力、出力ファイル名を共に、コンソール画面から入力するというところで困っています。 コンソールから読み込みについては、バッチの利用も考えてmain関数で、  int main(array<String^>^ (変数名)) とし、String^型でファイル名を読み込みました。 しかし、実際にファイルを呼び出す際には、  fopen_s(&fp, (char*型ファイル名) ,"a"); を利用するため、char*型に変換しなければなりません。 ToCharArrayを試しましたが、 'cli::array<Type,dimension> ^' から 'char *' に変換できません。 とエラーが出ますし(過去の質問にもあります)、キャストも同様です。 ファイル名の読み込みをchar*にもしてみましたが、String^にするようにとのエラーが出ました。 何か良い解決方法はないでしょうか。 (1)String^型からChar*へ変換する (2)String^型でファイルを開く(fopen_s以外の)関数を探す などの解決法があると思いますが、どちらでもかまいません。 ご存知の方、よろしくお願いします。 情報が不足していましたら、どのような情報が必要かもお教えください。 よろしくお願いします。