표준용량 구체화하십시오 을 챨 *

I want a 챨 변환하십시오 표준용량 구체화하십시오 붙여넣습니다 챨 또는 [] 데이터 유형:.

std::string str = "string";
char* chr = str;

결과: "오류: "표준용량 구체화하십시오" 로 변환할 수 없는 "챨." ".

이를 위해 어떤 방법을 사용할 수 있습니까?

해결책

39 이 won& 자동으로 변환, t (다행이다). # 39 를 사용해야 하는 방법 () ',' ll you& c_str afaq C 문자열 버전.

std::string str = "string";
const char *cstr = str.c_str();

참고로 이 const char * ',' a '되돌려줍니다 # 39, 너회가 aren& c_str () '에서' c 스타일 구체화하십시오 반환되었습니다 변경할 수 없다. # 39, ll 이 처음 복제본에 스케쳐내 you& 처리할 수 있다.

std::string str = "string";
char *cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
// do stuff
delete [] cstr;

또는 현대의 C++:

std::vector cstr(str.c_str(), str.c_str() + str.size() + 1);
해설 (18)

[자세한 내용은 여기] (https://stackoverflow.com/a/4152881/111307) 및 [here] (https://stackoverflow.com/a/10916896/111307) 이지만 사용할 수 있습니다.

string str = "some string" ;
char *cstr = &str[0];
해설 (12)

39 I& 필요한 경우, d, s # 39 구체화하십시오 내용을 변경 가능 기초형상 복제본입니다 c++& 어졌다면 I& 못하며창조된; d # 39 이:

std::string str = "string";
char* chr = strdup(str.c_str());

이상:

free(chr); 

왜 내가 함께 새 [], 또는 다른 사람들과 같이 t # 39 don& 표준용량 벡터입니다 해야했다. I need a c 스타일 때문에 변경 가능 기초형상 char* 구체화하십시오 관심용 싶어서 호출하십시오 때 C 코드를 C 코드를 문자열 및 할당 해제 및 할당 물건을 free () 와 함께 변하는 경우는 malloc () (스트라고 /dev/raw/raw1 malloc) . 그래서 지나갈 경우 X it 기초형상 문자열이어야 내 일부 기능을 할 수 있는 C 로 짜여진 구속조건으로 it& # 39 의 주장을 힙에서의 할당할지 수 있다 (예를 들어, 함수 호출 할 수 있습니다) 에 대해 realloc 을 수행할 &prs.). 그러나 그것은 매우 낮다 (일부 사용자 재정의했습니다.) 인수를 통해 기대할 수 있을 것이라는 할당할지 새 []!

해설 (1)

&lt sub&gt, (이 질문에 대한 qic C++98 전용임) &lt /sub>;;

39, 제발, don& 기초형상 '*' 챨 사용할 수 없다.

std::string str = "string";
std::vector chars(str.c_str(), str.c_str() + str.size() + 1u);
// use &chars[0] as a char*
해설 (10)

그냥 같은 경우 c 스타일 나타내는 문자열 a * 내용:

const char * ca = str.c_str ();

  • 원할 경우 c 스타일 new 방법 중 하나는 콘텐츠 와 문자열 (string 크기를 컴파일 타임에 너회가 don& # 39 점을 감안하면, t know) 동적입니다 할당일까요:

char * ca = new 챨 [스트리시즈 () +1]; 표준용량 복제본에 (스트라스베긴 (), 스트리런드 (), ca),

39, & # 39 \0& ca [스트리시즈 ()] =;;

[] ',' T forget it don& # 39 를 삭제할 수 있다.

  • 제한된 길이 어레이입니다 정적으로 할당할지 원할 경우, 대신:

size_t const 개/최대 cx3-80. 최대 자 // 챨 ca [맥스야] = {}; 표준용량 복제본에 (스트라스베긴 (), (스트리시즈 &gt (), = 맥스야? 스트라스베긴 () + 최대: 스트리런드 ()), ca).

39 는 이러한 유형이 단순 ',' 표준용량 구체화하십시오 doesn& 암시적으로 변환하시겠습니까 이렇게 하는 것은 일반적으로 설계 냄새가 난다. Really 필요로 합니다.

      • ',' 이 필요한 경우 말해둘꼐요 챨 best 운행에서어떠한 다르지는 않을 것이다.
vector v(str.begin(), str.end());
char* ca = &v[0]; // pointer to start of vector
해설 (15)

39 에 대한 설명으로 이 낫겠다 bobobobo& don& # 39 라고 하지만 나는, 이를 위해 이 담당자별로 없다. 그러나 이 같은 일이 는 우수한 사례.

비록 도움이 필요하면, 다른 대답이 '*', '상수' 없이 '를 명시적으로 변환하십시오 표준용량 구체화하십시오 챨 const_cast' 는 친구.

std::string str = "string";
char* chr = const_cast(str.c_str());
  • Give you a * 단, 이렇게 하면 안 데이터 복제본만. it 부여하느뇨 너회가 대한 포인터입니다 구체화하십시오. 따라서 ',' 크레 수정하면 you& # 39, str '' ll 수정하십시오 요소이다.
해설 (0)

방금 c 스타일 문자열을 입력으로 전달하십시오 가정할 때 필요합니다.

std::string str = "string";
const char* chr = str.c_str();
해설 (0)

현학적 엄격하게 할 수 없습니다, [] 데이터 변환 &quot 표준용량 구체화하십시오 붙여넣습니다 챨 net/* 또는 챨 type.&quot.

다른 답을 로 표시한 복사할 수 있습니다 컨텐츠의 챨 * const char 배열 또는 표준용량 구체화하십시오 을 만들 수 있는 내용이 있기 때문에, c, &quot style&quot 표준용량 구체화하십시오 액세스할 수 있습니다.

39 를 하는 경우, re you& 변경하십시오 표준용량 구체화하십시오 표준용량 구체화하십시오 형식이 내용을 모두 할 수 있다는 것 그 방법에 대해 아무것도 할 수 있습니다.

39 는 몇 가지 기능 있는 경우, re trying to pass redhat. you& 챨 windows*용 there& # 39 의 std::string::c_str ().

해설 (0)

39 의 completeness&. # 39, 제발, don& 't forget 표준용량 구체화하십시오 복제본에 ()'.

std::string str = "string";
const size_t MAX = 80;
char chrs[MAX];

str.copy(chrs, MAX);

39 doesn& 표준용량 구체화하십시오 복제본에 () ',' t nul 종료시킵니다. C 에서 사용할 수 있도록 하는 경우 NUL 종단기 문자열 함수.

std::string str = "string";
const size_t MAX = 80;
char chrs[MAX];

memset(chrs, '\0', MAX);
str.copy(chrs, MAX-1);
해설 (0)

여기에 강력한 버전 포로토콜 버퍼 '에서' 하나 더 있다.


char* string_as_array(string* str)
{
    return str->empty() ? NULL : &*str->begin();
}

// test codes
std::string mystr("you are here");
char* pstr = string_as_array(&mystr);
cout 
해설 (1)

반복자가 사용하여 만들 수 있습니다.

std::string str = "string";
std::string::iterator p=str.begin();
char* chr = &(*p);

행운을 빕니다.

해설 (0)
char* result = strcpy((char*)malloc(str.length()+1), str.c_str());
해설 (0)
  • 아래 쓸 수 있는 것처럼 챨 벡터를 사용할 수도 있습니다.
//this handles memory manipulations and is more convenient
string str;
vector  writable (str.begin (), str.end) ;
writable .push_back ('\0'); 
char* cstring = &writable[0] //or &*writable.begin () 

//Goodluck  
해설 (2)

Oop 의 스타일을 변환

  • 콘베르테리호프 *
class StringConverter {
    public: static char * strToChar(std::string str);
};
  • 콘베르테리코프 *
char * StringConverter::strToChar(std::string str)
{
    return (char*)str.c_str();
}

사용

StringConverter::strToChar("converted string")
해설 (1)

또한 작동합니까


std::string s;
std::cout
해설 (0)

39 의 챨 * orlp& 안전한 버전을 사용하는 오토메이티드 unique_ptr:

std::string str = "string";
auto cstr = std::make_unique(str.length() + 1);
strcpy(cstr.get(), str.c_str());
해설 (0)