비주얼스튜디오 6.0에서 스레드에서 strtok를 쓸일이 있어서 구현해봤습니다.
급조한거라 문제 발생 할 수도 있으니 충분히 테스트 해보시고
프로그램이 갑자기 죽어버릴경우 이 함수를 한번 의심해 보세요 ㅎㅎ;
two() => 이중 토큰 예제
three() => 삼중 토근 예제

char *my_strtok_s(char* s1, char* s2, char **s3)

{

char *tmp;

char *src;

BOOL bMake = FALSE;

if(s1)

{

tmp = strstr(s1, s2);


if(!tmp)

return NULL;


*s3 = new char[strlen(s1)+5];

ZeroMemory(*s3, strlen(s1)+5);

src = s1;

}

else if(strlen(*s3) > 0)

{

src = new char[strlen(*s3)+1];

strcpy(src, *s3);

bMake = TRUE;

}

else

{

delete [] *s3;

*s3 = NULL;

return NULL;

}

tmp = strstr(src, s2);

if(tmp)

{

strcpy(*s3, src+(tmp-src+1));

src[tmp-src] = '\0';

strcpy(*s3+(strlen(*s3)+2), src);

tmp = *s3+(strlen(*s3)+2);

}

else

{

if(strlen(*s3) > 0)

{

*s3[0] = '\0';

strcpy(*s3+2, src);

tmp = *s3+2;

}

}

if(bMake) delete [] src;

return tmp;

}

void two()
{
 char sztmp[] = "1,2,3|4,5,6|7,8,9";
 char *tmp, *tmp2;
 char *tmp3, *tmp4;

 for(tmp = my_strtok_s(sztmp, "|", &tmp2); tmp!= NULL; tmp = my_strtok_s(NULL, "|", &tmp2))
 {
  for(tmp3 = my_strtok_s(tmp, ",", &tmp4); tmp3!= NULL; tmp3 = my_strtok_s(NULL, ",", &tmp4))
   ::MessageBox(NULL, tmp3, "^^", MB_OK);
 }
}

void three()
{
 char sztmp[] = "1,2,3|4,5,6^7,8,9|10,11,12";
 char *tmp, *tmp2;
 char *tmp3, *tmp4;
 char *tmp5, *tmp6;

 for(tmp = my_strtok_s(sztmp, "^", &tmp2); tmp!= NULL; tmp = my_strtok_s(NULL, "^", &tmp2))
 {
  for(tmp3 = my_strtok_s(tmp, "|", &tmp4); tmp3!= NULL; tmp3 = my_strtok_s(NULL, "|", &tmp4))
   for(tmp5 = my_strtok_s(tmp3, ",", &tmp6); tmp5!= NULL; tmp5 = my_strtok_s(NULL, ",", &tmp6))
    ::MessageBox(NULL, tmp5, "^^", MB_OK);
 }
}


'프로그래밍 팁 > etc' 카테고리의 다른 글

전체 화면이 사용 중인지 판단하기  (0) 2011.05.26
권한 정보 조회(UAC)  (0) 2011.05.13
컨텍스트 정보  (0) 2011.03.18
Context menu  (2) 2011.03.18
원격 네트워크 MAC주소 구하기  (0) 2011.03.04
Posted by 띠깜
,