비주얼스튜디오 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 |