strtok 사용에 대한 질문 입니다.
새우깡
질문 제목 : strtok 사용에 대한 질문 입니다.배열을 사용할땐 상관 없었으나 포인터를 사용하니 에러가 발생 합니다. 에러 설명과 해결 방법 부탁 드립니다.질문 내용 :
#includestdio.h
#includestring.h
#includestdlib.h
void sideresult(char *line, int r2);
int main(void)
{
char line1[100] = the secret to friendship is being a good listener.;
sideresult(line1, 2); //line1 의 2번째 단어 출력.
return 0;
}
void sideresult(char *line, int r2)
{
char *mean = null;
int loop = 0;
printf(test:%s\n, line); //line 값이 제대로 넘어오나 확인.
mean = strtok(line, );
for(loop=1; loopr2; loop++)
{
mean=strtok(null, );
if(mean == null)
{
printf(관련 단어는 존재하지 않습니다.\n);
exit(1);
}
}
printf(%s\n, mean);
}
위와 같이 실행하면 2번째 단어가 정상적으로 출력 되나
굵게 표시된 부분을char *line1 = the secret to friendship is being a good listener.;
와 같이 고치면mean = strtok(line, ); 부분에서 오류가 발생하는거 같습니다.
그냥 생각 하기로는..
배열을사용할때는 배열의 인덱스 위치에 스페이스가 있으면 바로 그 위치를 알려줘서 strtok가 사용 가능 하지만
포인터일 때는.. 주소를 참조 하니까 스페이스의 위치를 바로 참조하지 못해서 그런거 같은데...이게 맞는지...
에러 나는 이유와 해결 방법 부탁 드립니다 ~(포인터로 해결 방법)
-
해골
printf(\%s\\n\
-
로다
strtok가 수정을 하게 되버리는구나..
빠른 답변 감사합니다~ -
봄해
strtok 함수가 원래의 문자열을 수정하게 되므로 에러가 발생하게 됩니다.
\ \로 사용된 구분자를 찾게 되면 그곳에 0을 넣게 됩니다.