2010-08-01 5 views
1

가능한 중복 :
how to copy char * into a string and vice-versaC++ 문자열의 char *

I는하지만, 숯불 *

MyMethod(char * parameter) 
{ 
    // code 
} 

필요한 방법으로 값을 전달해야 매개 변수는 현재 std :: string입니다. std :: string을 char *로 변환하려면 어떻게해야합니까?

std::string myStringParameter = //whatever 

char * myCharParameter = //Convert here somehow 

MyMethod(myCharParameter); 
+0

중복을 [문자열과 그 반대에 * 문자 복사하는 방법 (HTTP ://stackoverflow.com/questions/2564052/how-to-copy-char-into-a-string-and-vice-versa). –

+1

man :-( –

답변

4

당신은 c_str() 방법을 찾고 있습니다 :

char * myCharParameter = myStringParameter.c_str(); 

당신은 대신 const char *char *에 그걸 얻기 위해 const_cast 반환해야 할 수도 있습니다. 그래도 문자열을 수정하지 마십시오. std::string 개체의 내부 버퍼입니다. 실제로 문자열을 수정해야하는 경우, 다른 버퍼에 복사 strncpy을 사용해야합니다.

char * myCharParameter = new char[myStringParameter.length() + 1]; 
strncpy(myCharParameter, myStringParameter.c_str(), myStringParameter.length() + 1); 

// And later... 
myStringParameter.assign(myCharParameter); 
delete [] myCharParameter; 
+2

const char *를 정확하게 검색하면 이러한 질문을 결코 찾을 수 없습니다. – seand

+0

'c_str()'은'char *'가 아닌'const char *'를 반환합니다 .. –

+0

@James Mcnellis 질문에 이미 대답했습니다 – jdmichal

1

그것은 MyMethod라는 사실에 전달되는 문자열을 변경 여부에 따라 달라집니다

을 유일한 것은 당신이 알고있는 경우 그것에 대해 서명, 그럼 당신은 문자열을 변경할 수 있다고 가정하고 @ jdmichal의 답변에 따라 임시 버퍼로 복사해야합니다.

이 API 개발자는 const 정확성에 대해 몰랐거나 알 수 없었을 가능성이 있습니다. 따라서 함수는 변경하지 않더라도 비 const 버퍼를 사용합니다.

그것은 당신이에 의해 얻을 수있는 경우라면 :

MyMethod(const_cast<char*>(myStringParameter.c_str()); 

내 인생에서 내가 const을 했어야 비 const 문자열에 몇 가지 API의 복용보다 더 건너왔다는.

0

함수가 실제로 문자열을 수정려고하는 경우에, 당신은 더 나은 별도의 복사본을 만들 것입니다 :의

std::string str = // ... 
char* cstr = strdup(str.c_str()); 
MyMethod(cstr); 
// If you want to preserve the changes made: 
// str = cstr; 
free(cstr);