2012-07-24 4 views
-1

다음 코드를 사용하여 아래 출력을 얻습니다.C++ strtok : 얻고 할당하는 방법

원래 문자열 -CCY 1.2624 Up 0.0006(0.05%) 01:37 [37]

char* pch; 

pch = strtok (buffer," "); 

    while (pch != NULL) 
    { 
    printf ("%s\n",pch); 
    pch = strtok (NULL, " "); 

    } 

이 내 출력

CCY 
1.2624 
Up 
0.0006(0.05%) 
01:37 
SGT 
[37] 

이다가 어떻게이 1.2624를 얻을 그래서 나중에 printf 또는 뭔가처럼 사용할 수있는 CSTR에 할당 할 것입니다 while 루프 외부에있을 때?

+0

무엇이'cstr'입니까? C 문자열 또는 C++'std :: string'? – pb2q

+0

항상 두 번째 토큰이된다는 것을 알고 있습니까? –

+1

'strtok'은 슬픔과 절망으로 만들어졌으며, 현대 C++ 코드에서 사용하지 말아야한다는 것을 알고 있습니까? _right_? –

답변

1
char* pch; 

pch = strtok (buffer," "); // pch == "CCY" 
// again: 
pch = strtok (NULL, " "); // pch == "1.2624" 

가 제공된다 할 이유 buffer은 두 개 이상의 항목으로 분할 될 수 있습니다.

1

strtok는 정적 버퍼를 사용하기 때문에 자신이 원하는 버퍼의 문자열을 복사해야합니다. 뭔가 같은 :

char* numbuffer = malloc(sizeof(char) * strlen(pch)); 

if (numbuffer != NULL) { 
    strcpy(numbuffer, pch); 
} 

더 많은 예제 : http://www.cplusplus.com/reference/clibrary/cstring/strcpy/

당신은 strtok를하는 후속 호출이 버퍼의 값이 PCH가 가리키는 변경 때문에이

+1

잘못된 대답, 좋은 대답은 "strtok을 사용하지 말라"고하고 그것을 올바르게하는 법을 보여줄 것입니다. –

+0

질문에 "strtok을 사용해야합니까?"라는 질문을하지 않았습니다. 그것을 범위에 보관. – AlcoJaguar

+1

그러나 "strtok에게 도움을 요청하십시오"라는 답변에 대해서는 조언을 구하는 것이 도움이됩니다. 질문은 (아주 현명하게) "나는 어떻게해야합니까?" "strtok으로 어떻게 xyz를 할 수 있습니까?" –