2014-09-23 5 views
0

std :: string 수 const void * ('/ 0'없이 c-string 가리키는) 변환해야합니다.std :: string에 void void * (char *없이 0) std :: string

나는 기능 "기능"이 : 나는 '기능'의 첫 번째 매개 변수 성병 : : 문자열을 변경할 수있는 방법

... 
std::string x("abcd"); 
function(x.data(), x.size()); 
... 

:

void function(const void* ptr, size_t size); 

전화가?

(나는 이상한 보인다 알고있다. 나는 간단한 예제를 작성했습니다. 내가 변환에 대해 질문하고 싶습니다.)

+2

, 왜 단지'x'를 전달하고 프로토 타입을 변경하지? – Chnossos

+0

'void function (std :: string)'? –

+0

그것은 단지 어리석은 예이지만이 변환을해야합니다. 나는 프로토 타입을 바꿀 수 없다. 세부 정보를 쓰고 읽을 수없는 코드를 붙여 넣기를 원하지 않습니다. – peter55555

답변

8

void*을 유형 캐스트와 std::string 생성자에 모두 값을 전달 : 이해가 안

void function(const void* ptr, size_t size) 
{ 
    std::string s(static_cast<const char*>(ptr), size); 
    ... 
} 
+0

'static_cast '은'const void *'와 잘 작동합니까? –

+0

@ πάνταῥεῖ, 예, 적절하게 시작한 경우 (즉, '이중 *'또는 다른 것이 아닌 경우). – chris

+0

@chris 좋아, 그냥'void *'의 경우에 대해서는 확실하지 않았다.'static_cast ()'이 당연히 바람직하다. –

3

은 "내가 어떻게 성병에 첫 번째 매개 변수를 변경할 수 있습니다 : 문자열에 ' 기능'?"

void function(const void* ptr, size_t size) { 
    std::string str((const char*)ptr,size); 
} 

작동합니다.

+0

게으른 던지기를 위해 부. –

관련 문제