2012-04-23 2 views
11

"OpenStack : OpenStack1"과 같은 값을 가질 수있는 const char * 변수가 있습니다. const char * 형식의 구분 기호가 ":"인 strtok을 사용하여이 const char *를 토큰 화하려고합니다. 하지만 문제는 strtok이 다음과 같은 타입의 것입니다 : char * strtok (char * str, const char * delimiters);Const char * 토큰 화에 Strtok을 사용하는 방법?

즉 char *이어야하므로 첫 번째 입력에 const char *를 사용할 수 없음을 의미합니다. 이 const char *를 char *로 어떻게 변환 할 수 있는지 말해 주시겠습니까?

감사합니다.

+1

복사 하시겠습니까? http://linux.die.net/man/3/strdup –

+0

해당 페이지에서 복사해야한다는 뜻입니까? –

+0

아니요, 설명 된 함수를 사용하여 문자열을 복사해야한다는 의미였습니다. –

답변

12

strtok은 실제로 문자열에 쓰므로, 토큰화할 수있는 쓰기 가능한 복사본을 만들어야합니다.

char* copy = strdup(myReadonlyString); 
...tokenize copy... 
free(copy); 
+0

고마워요. 작동합니다. –

+3

복사본을 만드는 C++ 방법은'std :: vector copy (myReadonlyString, myReadonlyString + strlen (myReadonlyString));'입니다. 그런 다음'copy-> data()'를 토큰화할 수 있습니다. 컴파일러는 범위를 벗어날 때마다 사본을 자동으로 할당 해제합니다. – ManuelAtWork

0

수정할 수없는 문자열의 복사본을 만든 다음 strtok을 사용할 수 있습니다.

mallocstrcpy을 이식 가능하게 사용할 수 있습니다. ,

char tokenedStr[] = "OpenStack:OpenStack1"; 

불가능하다면 문자 배열에 복사

1

배열로 선언.

+0

그래도 좋은 방법이야. –