strtok 관련 질문입니다...
글쓴이: dragem / 작성시간: 수, 2004/12/01 - 10:06오후
a란 함수에서 strtok을 쓰다가 b란 함수를 호출하여
그 속에서 strtok을 사용하면 안되는 겁니까?
a(char *buf)
{
char *tok;
tok = strtok(buf, " \n");
while( tok != NULL)
{
b(tok);
tok = strtok(NULL, " \n");
}
}
b(char *buf)
{
char *tok;
tok = strtok(buf, " \n");
while( tok != NULL)
{
printf("%s", tok);
tok = strtok(NULL, " \n");
}
}
다른 함수에서 사용된 strtok이 내부버퍼를 공유하여 제대로 동작하지 않는거 같습니다.. 이럴때 어떻게 해결하는 방법이 있을까요...
Forums:


어떤 의도로 작성하신 코드인지는 잘 모르겠지만...포인터를 따라가
어떤 의도로 작성하신 코드인지는 잘 모르겠지만...
포인터를 따라가보세요.
a에서 buf로 받은 것, a의 tok, a의 tok을 b의 buf로 주고, 그건 또 b의 tok으로...
문자열을 복사한다던지 하는 방식으로 동작해야겠지요.
strtok_r 이던가.. 하튼.. thread_safe 한 버젼을 쓰세
strtok_r 이던가.. 하튼.. thread_safe 한 버젼을 쓰세요..
=3=33
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
strsep(3)을 쓰셔도 됩니다. 저는 왠지 이게 더 편하더군요.
strsep(3)을 쓰셔도 됩니다. 저는 왠지 이게 더 편하더군요.
Re: strtok 관련 질문입니다...
기본적으로 strtok 는 내부적으로 static 을 이용합니다. 당연히 이렇게 부르면
쓸수가 없는게 당연합니다. 고운 하루되시길...
=========================
CharSyam ^^ --- 고운 하루
=========================
Re: strtok 관련 질문입니다...
strtok_r 은.. static 버퍼를 이용하지 않습니다 ;)
char * strtok(char *str, const char *sep); char * strtok_r(char *str, const char *sep, char **last);오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
Re: strtok 관련 질문입니다...
쿨럭, 물론 알고 있습니다. 그래서 기본적으로라고 한겁니다. 쿨럭... 흑흑흑
태영님 나빠요 T^T
=========================
CharSyam ^^ --- 고운 하루
=========================
strtok_r 소스
OS 에 따라서 없는 경우도 있습니다 참조 하시길 바랍니다.
char * strtok_r(char *s, const char *delim, char **last) { const char *spanp; int c, sc; char *tok; if (s == NULL && (s = *last) == NULL) return NULL; cont: c = *s++; for (spanp = delim; (sc = *spanp++) != 0; ) { if (c == sc) { goto cont; } } if (c == 0) /* no non-delimiter characters */ { *last = NULL; return NULL; } tok = s - 1; for ( ; ; ) { c = *s++; spanp = delim; do { if ((sc = *spanp++) == c) { if (c == 0) { s = NULL; } else { char *w = s - 1; *w = '\0'; } *last = s; return tok; } } while (sc != 0); } }가자 해외로 ~ .. 돈 벌러.
Re: strtok_r 소스
흐윽 저기요 저는 strtok 를 말한겁니다. strtok_r 을 말한게 아니구요 T.T
strtok_r
다른 분들이 달아주신 답변은, strtok를 그런 식으로 사용하면 내부에서 사용하는 static 변수때문에 정상적으로 작동하지 않으니, strtok_r을 사용하라고 충고해주신 겁니다.
굳이 strtok를 쓰셔야만 하는 상황이라면(제 경험으로 보면 그런 일은 거의 없지만) 버퍼를 복사해놓고, 한 버퍼에 대해서 다 처리한 후에,
다른 버퍼를 처리하셔야 할 겁니다.
어쨌든, 질문자께서 지금 사용하신 방법으로는 원하시는 일을 할 수 없을 겁니다.
댓글 달기