|
스트링 토크나이져(strtok)가 대단한 일을 해 주는게 아닙니다.
결국 그녀석도 한 문자씩 처리하는 것이니까요.
잉잉잉잉이이이이이.. 라고 표현하신데서 느낌이 팍팍 오고 있습니다만...
말씀하신 문제는 한 문자씩 처리하는데서 오는게 아니라,
넘어온 문자열과 예전에 개행문자를 만나 처리하고 남은 문자열들에 대해 제대로 대처하지 못해
생기는 문제 같네요.
아울러, while 문 안의 조건이 다분 위험해 보입니다.
과연 최근에 받은 버퍼 안에 CR 이나 EOF 문자가 항상 있다는 보장이 있을까요?
김지은 님이 쓰신 글 :
: C언어로 프로그램을짜고있습니다
:
:
:
: 소켓프로그래밍중입니다.
:
: 받은 문자열이 'message[BUF_SIZE]' 라는곳으로 들어옵니다
:
: 그런데 문자열이 한줄씩이 아닌
:
:
:
: 가나다라마바사
:
: abcdefghijklmn
:
: 잉잉잉잉이이이이이..
:
:
:
:
:
: 이런식으로 들어옵니다
:
: ㅠㅠ 이렇게 뭉텅이로 들어온 문자열을 줄단위로
:
: 한줄씩 잘라서
:
:
:
: <ㅋ>가나다라마바사
:
: <ㅋ>abcdefghijklmn
:
: <ㅋ>잉잉잉잉이이이이이..
:
:
:
: 이런식으로 앞에 문자를 넣어서 출력되게 (바로바로) 하고싶습니다
:
: ㅠㅠ
:
: 그런데
:
: 문자하나씩 받아서 나눠서 해보니 자꾸 이상하게 쓰레기값이들어가거나
:
: 문자열이 첫째줄만 들어오거나합니다
:
:
:
: 그 부분을 보여드리자면
:
:
:
: num=strlen(message);
:
: // buff[BUF_SIZE]=NULL;
: i=0;
: // for(i=0;i<num;i++)
: // {
: ch=message[j];
: while(ch!='\r'&& ch!=EOF)
: {
:
: ch=message[j];
: buff[k]=ch;
:
:
: // ch=message[j];
: j++;k++;
:
: }
: buff[k]='\0';
:
: strcpy(message1,buff);
: // strcpy(message2,RismData.ServerName);
: // strcat(message2,",");
: // strcat(message2,message1);
: // strcat(message3,message2);
: strcat(message3,_message);
:
:
: i=j; k=0;
:
:
: // }*/
:
:
:
: 이렇게 한뒤
:
: message3 에
:
: 한줄씩 모은
:
: 예를 들면
:
:
:
: <ㅋ>가나다라마바사
:
: <ㅋ>abcdefghijklmn
:
: <ㅋ>잉잉잉잉이이이이이..
:
:
:
: 한줄씩 해서 저런모양이된것을 모읍니다
:
: 한뭉텅이씩 ㅜㅜ
:
: 그다음에 출력하려고합니다 .
:
: ㅠㅠ
:
: 방법이없을까요 ㅠ
:
: 저렇게 문자하나씩 받는방법말구요 휴
:
: strtok 쓰려고하는데 포인터로 어떻게 가르쳐야 할지 ㅠㅠ휴
|