strtok을 사용하여 madddy 문자열을 분할하는 다음 스 니펫을 고려해보십시오.strtok을 이해하려고 시도합니다
char* str = (char*) malloc(sizeof("Madddy"));
strcpy(str,"Madddy");
char* tmp = strtok(str,"d");
std::cout<<tmp;
do
{
std::cout<<tmp;
tmp=strtok(NULL, "dddy");
}while(tmp!=NULL);
출력이 Ma입니다. 그러나 strtok을 다음과 같이 수정하여
tmp=strtok(NULL, "ay");
출력이 Madd가됩니다. 그렇다면 strtok은 어떻게 작동합니까? strtok이 구분 기호 문자열에있는 모든 문자를 구분 기호로 사용하도록 기대했기 때문에 나는이 질문을 가지고 있습니다. 그러나 어떤 경우에는 그렇게하고 있지만, 경우에 따라 예기치 않은 결과가 나타납니다. 아무도 내가 이것을 이해하도록 도울 수 있습니까?
나는 정직하게이 작업을 수행하는 올바른 방법이 완전히'strtok' 사용을 중지하는 것입니다 생각 :
여기에 더 C와 같은 것으로 수정 한 코드입니다. 스레드 안전성을 보장하지 않으면 사용하기 어렵고 디버그하기 어려운 기능입니다. 파싱을하기 위해서는'string :: find'와'string :: substr'의 조합을 사용하는 것이 가장 좋습니다. – templatetypedef
또는'boost :: token_iterator' –
특히 C++가 아니라 C를 사용하고 있기 때문에 중요성과 강조를 위해이 작업을 반복 할 의향이 있습니다. 또한 boost :: tokenize를 살펴보아야 할 수도 있습니다. –