2011-12-11 3 views
1

지도를 반복해야하고 인쇄 할 함수에 const char 배열을 보내야합니다. 문자열을 사용하려고했으나 결과는 동일하지만, 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::string의 구성원을 사용하십시오.

+0

일 필요가 없습니다 아무것도 복사 할 수 있습니다. – 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()으로 전화하여 const char*std::string가 저장되어 있어야합니다.

그런데 문자열의 최대 크기는 null 문자를 포함하여 4이 될 것입니까? 더 나은 사용 strncpy 대신으로 strcpy : 세 번째 인수는 문자의 수를 대상으로 소스에서 복사 할

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

.

+0

4 대신'sizeof initials'를 사용하십시오. – kennytm

+1

@KennyTM :이 경우에는 괜찮습니다. 그러나 포인터를 선언으로 변경 한 경우 붐! – Nawaz

관련 문제