- ベストアンサー
非MFCにおいて,_PRTマクロを利用し,vectorにしたstringの値を表示すること
vc.net2003にて,非MFC環境にてプログラミングしています.非MFCなのでTRACEが使えず,代わりに_PRTを使用してデバックウィンドウに変数の値を表示させているのですが,vectorにしたstringの値が表示されず困っています. #include <vector> vector<string> string1; string1.push_back("Hellow"); _RPT1(_CRT_WARN, "string1: %s \n", string1); というようなコードを書き,プログラムを実行するとアクセス違反が出て,うまくいきません.何が間違っているのでしょうか.教えていただけませんか.
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
_PRT1マクロが、 「CDのディスクを入れると、CDを再生してくれる装置」 だったとします。 _PRT1の装置に、「ケースに入ったCDを30枚入れたラック」を入れようとすると、当然入らない(コンパイルエラー)か、動作不良を起こす(アクセス違反)か、壊れ(ブルーバック、OSが落ちる)ます。 ラックから再生したいケースを取り出し、ケースからCDを取り出して装置に入れる必要があります。 -- string1の型→vector<string> _PRT1の要求する型→const char* (?) と、扱う型が違うのが原因です。
その他の回答 (2)
- sha-girl
- ベストアンサー率52% (430/816)
_RPT1(_CRT_WARN, "string1: %s \n", string1[0].c_str() ); でどうですか?
お礼
うまくいきました.二日ほど試行錯誤して自力解決できませんでした.c_str()は思いつきませんでした.ありがとうございました.
- ivory-star
- ベストアンサー率57% (16/28)
vectorはコンテナですので、そのまま文字列としては扱えません。 コンテナのデータを一旦、文字列として出力する必要があります。 --- #include <vector> string vec_to_str(vector<string>& vec) { string str; for ( vector<string>::iterator i=vec.begin() ; vec.end()!=i ; ++i ) str += *i + " "; return str; } vector<string> string1; string1.push_back("Hellow"); _RPT1(_CRT_WARN,"string1:%s\n",vec_to_str(string1).c_str()); --- ちょっと手抜きですが、こんな感じで表示されるようになりませんか?
お礼
ご丁寧にありがとうございます.ばっちりうまくいきました.たすかりました.
お礼
ありがとうございます.うまくいきました.