2011-12-11 19 views
1

マップをループして、関数にconst char配列を送信して印刷する必要があります。文字列cpyを使用しようとしましたが、結果は同じですが、 const文字列をcharに変換することはできません。私は何が間違っていますか?マップを印刷するとconst文字列をconst char配列に変換できません

std::map <std::string, int>::const_iterator end = scores.end(); 
std::map<std::string, int>::const_iterator it; 
for (it = scores.begin(); it != end; ++it) 
{ 
    char initials[4]; 
    strcpy(initials,it->first); 
    //std::string s = ""; 
    DrawString(screen, widthscreen/2 - (14*16)/4, heightscreen/2, initials,charsetsmall, 8); 
+0

... –

答えて

3

あなたは、文字列のメンバ関数にstring::c_str

it->first戻りstd::stringない基本となる文字データを使用する必要があります。上記のメンバー関数を使用する必要があることを抽出します。

あなたは使用する必要があります。

何明白な答え
strcpy(initials,it->first.c_str()); 
2

std::stringc_str()メンバーを使用してください。

DrawString(..., it->first.c_str(), ...); 
+0

+1不要に何かをコピーします。 – UncleBens

1

文字列をcharに変換する必要があります。

strcpy(initials, it->first.c_str()); 

it->first.c_str(); 
0
strcpy(initials,it->first); 

変更、それを試してみてくださいしかし、これはいくつかのセキュリティ上の問題を発生させることができます。

2
strcpy(initials,it->first); //error 

それはこのようになります。firststd::stringあるので

strcpy(initials,it->first.c_str()); //ok 

c_str()に電話をかけてstd::stringが保存されているconst char*を取得する必要があります。

ところで、文字列の最大サイズはnull文字を含む4になるのでしょうか?活用strncpyの代わりとしてstrcpy:3番目の引数が文字の数は、ソースから宛先へコピーする

strncpy(initials,it->first.c_str(), 4); //better 

+0

4の代わりに 'sizeof initials'を使うのが良いです。 – kennytm

+1

@KennyTM:これは大丈夫ですが、この場合は宣言をポインタに変更してBOOM! – Nawaz

関連する問題