2017-12-12 9 views
0

std :: string을 unsigned char **에 어떻게 전달할 수 있습니까?C++에서 std :: string을 const unsigned char **에 전달하는 방법

예 :

/* Func declaration */ 
void get_string(const unsigned char **str, int *len) { 

/* Caller func */ 
std::string str; 
int len = 0; 
get_string((const unsigned char **)str.c_str(), &len)  // Can we do this? 
+0

*** *** 우리는 이것을 할 수 있습니까? *** No. – drescherjm

+0

서명되지 않은 char *을 정의하고 참조를 전달해야합니까? std :: string을 사용하여이 작업을 수행 할 수있는 방법이 있습니까? – MeRock027

+0

이 마법을 가지고 무엇을 성취하려고합니까? –

답변

2

당신은 get_string의 문서를 읽고 의미가 기대되는 인수의 무엇인지 이해할 필요가있다.

저는 인수가 출력 매개 변수이고 alraedy가있는 문자열에 대한보기를 출력한다고 가정하겠습니다.

std::string은 문자열을 관리하기 때문에 뷰처럼 작동 할 수 없습니다. 따라서 보려는 문자열의 복사본 인 새 문자열을 만들어야합니다. 코드 수 :

unsigned char const *s; 
int len; 
get_string(&s, &len); 
std::string str((char*)s, len); 

컴파일러는 최신 언어 표준 (C++ 17) 다음 뷰 사용과 최신 인 경우 : 물론 가정

std::string_view str((char*)s, len); 

을 나중에 그 일을하려는 의도가 무엇이든간에보기가 충분하다는 것입니다.

+0

물론 감사합니다, @ M.M. 나는 여분의 사본을 피하려고 노력했다. 그러나 나는 대안이 없다고 생각한다. Np. – MeRock027

+1

'get_string()'의 의미는 잠재적으로 호출자가'str'에 출력되는'char' 배열의 "소유권"을 가져다가 끝날 때 그것을 삭제할 것을 기대할 수 있습니다. 이 경우, 반환 된 포인터를'unique_ptr '('string' 생성자에서 예외가 발생한 경우)에 랩 한 다음 비슷하게'string' 객체를 생성합니다. –