• ベストアンサー

非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); というようなコードを書き,プログラムを実行するとアクセス違反が出て,うまくいきません.何が間違っているのでしょうか.教えていただけませんか.

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

  • ベストアンサー
  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

_PRT1マクロが、 「CDのディスクを入れると、CDを再生してくれる装置」 だったとします。 _PRT1の装置に、「ケースに入ったCDを30枚入れたラック」を入れようとすると、当然入らない(コンパイルエラー)か、動作不良を起こす(アクセス違反)か、壊れ(ブルーバック、OSが落ちる)ます。 ラックから再生したいケースを取り出し、ケースからCDを取り出して装置に入れる必要があります。 -- string1の型→vector<string> _PRT1の要求する型→const char* (?) と、扱う型が違うのが原因です。

hiyahiya12345
質問者

お礼

ありがとうございます.うまくいきました.

その他の回答 (2)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

_RPT1(_CRT_WARN, "string1: %s \n", string1[0].c_str() ); でどうですか?

hiyahiya12345
質問者

お礼

うまくいきました.二日ほど試行錯誤して自力解決できませんでした.c_str()は思いつきませんでした.ありがとうございました.

回答No.2

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()); --- ちょっと手抜きですが、こんな感じで表示されるようになりませんか?

hiyahiya12345
質問者

お礼

ご丁寧にありがとうございます.ばっちりうまくいきました.たすかりました.

関連するQ&A