stringのvectorをLPCSTRにキャストしたい

[戻る]
さおり 2004/11/08(月) 22:39:35
さおりといいます。
どなたか教えてください。
環境はWinXP、VC6.0、SDKです。

std::vector<std::string> FileList;

で定義したFileListに、ファイル名を登録していきました。
そこはうまくできたと思うのですが、確認も含め、ListViewに
表示させようとしたら問題です。

LPCSTRにキャストしなきゃと思っていろいろ試した結果
下のようになってしまいました。
一応、それらしい文字列は出てくるのですが、ファイル名の
頭にへへへへがついていて、一部のファイルはファイル名も
出てきません。

for(int i = 0; (unsigned)i < FileList.size(); i++){
  ListCtrl1.InsertItem(0, (LPCSTR)(&(FileList[i])));
}

自分で言うのもなんですが、強引なキャストというかキャストに
なってるかどうかもわかりません。

ただのstringならもっとすっきりできると思うのですが、
stringのvectorの場合、一般的にはどんな風にするものなのでしょうか?

どなたか教えてください・・・。よろしくお願いします。

monkey 2004/11/08(月) 23:05:12
    ListCtrl1.InsertItem( 0, FileList[i].c_str() );

でいかがでしょうか。

SunPac 2004/11/09(火) 09:56:21
LPCTSTRってconst char *のtypedefだったと思います。
std::string::c_str()がまさにそれですね。
(&(FileList[i]))っていうのはvectorに入っているstringのアドレスなので求めている物
とはまったく異なります。

ところでただのstringって何でしょう・・・?

さおり 2004/11/09(火) 23:00:07
[[解決]]
こんばんは。
monkey様、SunPac様、レスしていただいてありがとうございました。

std::string::c_str()で問題なかったです。

普通VC上でクラスのメンバの関数とかだと、.とか->とか書くと
自動的にウィンドウが現れて選択できるようになりますよね。

vectorのなかのstringだとどうもそれが出ないようで、そういう
使い方はできないのかなと思い込んでしまいました。
ただのstringと書いたのは、vectorにしないstringならc_str()
みたいなのがあるんだろうなと思ってて・・・。
調べようが足りなかったです。

なにはともあれ、解決することができました。
どうもありがとうございました。
今後ともよろしくお願いいたします。

PATIO 2004/11/10(水) 11:03:22
参考までにですが、

> 普通VC上でクラスのメンバの関数とかだと、.とか->とか書くと
> 自動的にウィンドウが現れて選択できるようになりますよね。
この機能をインテリセンスと言いますが、これは参考程度にした方がいいです。
バグなのか仕様なのかわかりませんが、いつも出てくれるとは限らないようなので。
理想から言うと基本的にはMSDNを参考にするようにして、
インテリセンスは出てきたらラッキーくらいに思っておいた方がいいです。
あの機能便利なんですけれど、ソースが長くなるとエディタの動作が重くなるし、
うまく働かないこともあるしで、頼りすぎると良くないように感じています。

さおり 2004/11/10(水) 23:49:50
[[解決]]
そういわれると、確かにあれっ出てこないって時があったような気もします。
単純に自分のコードがおかしいときが多いこともありますが・・・。

MSDNは英語の苦手な自分としてはあまり見たくないところですがそうも
言ってられないですよね。がんばります。

ところで、最新のMSDNって、VC6.0のMSDNに比べるとわかりづらい気がするの
ですが、そんなに変わってはいないんですかね。
scribbleのチュートリアルがなくてサンプルしか見当たらなかったんですが
見つけられなかっただけなんでしょうか?
初心者としてはたまに見たいときが出てくるんですよね。

独り言でした。
PATIOさま、レスありがとうございました。

古いスレッドには追加発言できません。