포인터 배열을 사용해서 토큰을 출력하려고 하는데 잘 안됩니다 ㅠㅠ

kykk0010의 이미지

#include
#include
#include

int main(void)
{
char s1[50];
char s2[10][50];
char *token[10];
char *context;
int i = 0;

printf("문자열을 입력하시오:");
gets_s(s1);

token[0] = strtok(s1," ");

while(token !=NULL)
{
printf("토큰 :%s\n", token[i]);
token[i] = strtok(NULL," ");
i++;
}

return 0;

}

도대체 어떻게 된 건지 이유를 모르겠네요 ㅠㅠ

익명 사용자의 이미지

돌려보지는 않았는데 두 군데 잘못된 것 같네요. 첫번째는 while 조건 문에서 token은 token[i]여야 할 것 같고 i++는 그 앞 문장보다 먼저 와야 할 것 같습니다.

kykk0010의 이미지

그래도 안되네요 ㅠㅠ

raymundo의 이미지

"그래도"라고 쓰지 말고 자기가 수정한 코드를 정확히 적으세요. 질문자가 정말 제대로 수정했는지 아닌지 답변하는 사람이 확인하도록.
"안되네요"라고 쓰지 말고 도대체 뭐가 어떻게 안 된다는 건지 적으세요. 컴파일 에러가 나는 건지, 실행할 때 오류가 나는 건지, 오류 메시지는 무엇인지, 오류는 안 나는데 동작이 원하는 대로 안 된다면 어떤 입력을 주었는지.

저는 윗분의 답글대로 고쳐서 아주 잘 되는 걸 확인했는데, 저는 gcc 를 쓰느라 gets_s 를 gets 로 바꿔썼습니다.
gets_s 는 인자로 버퍼의 크기도 같이 주어야 할 텐데, gets_s( s1, 50 ) 이런 식으로 한 번 고쳐보시죠.

좋은 하루 되세요!

익명 사용자의 이미지

제가 그동안 잘못 답글을 달았었네요 ㅠㅠ 죄송합니다

다행히 아래 주석에 달린 것과 같이 수정해서 잘 작동되었습니다!

#include
#include
#include

int main(void)
{
char s1[50];
char *token[10];
char *context;
int i = 0;
int j ;
printf("문자열을 입력하시오:");
gets_s(s1);

token[0] = strtok_s(s1," ",&context);

while(token[i] != NULL)
{

i++; \\반복구문에서 i값을 먼저 증가시킴

token[i] = strtok_s(NULL," ",&context);

}
printf("%d\n", i);

j= i;

for(i= j-1 ; i>=0 ; i--)
printf("%s ", token[i]);

return 0;

}