C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[59948] Re:strtok와 while 관련 가르쳐주세요.
한수동 [] 4575 읽음    2010-01-25 10:16
while 문 전에 쓴 strtok 이 문제이군요
strtok은 쓰게 되면 값을 변화 시키기 때문에 쓰실때 유의 하셔야 됩니다
strtok은 원하시는 문자까지의 값을 반환 한후 읽어드린 데까지의 데이타를 바꿉니다
"나 는 천 재"라는 값이
"나는 천 재" 로 바뀌는 것이지요

즉  HexStr의 값이 바뀌는 것이지요

while문 전에 쓴 strtok이 HexStr의 첫번째 값을 이미 뽑아서 보여주고 읽어들인데까지의 값을 망가뜨린후
님이 쓰신 while문에 들어가 또한번 strtok을 만나니까 2번째 값을 보여주는 것이지요 즉 첫번째 값은
while문 이전에 이미 한번 나온 것입니다

박정용 님이 쓰신 글 :
: "48 65 6C 6C 6F 20 57 6F 72 6C 64 21"라는 Hex값과 사이띄게로 이뤄진 문자열을 사이띄게를 기준으로 잘라서 각Hex값을 Hex값과 10진 int값과 해당 Ascii코드값에 해당하는 char값을 출력하려고 하는데, while문에서 48 값이 생략됩니다.
: 뭐가 문제일까요?
:
: 출력값
: =================================================
:
: hexadecimal value = 65, int value = 101, char value=e
: hexadecimal value = 6C, int value = 108, char value=l
: hexadecimal value = 6C, int value = 108, char value=l
: hexadecimal value = 6F, int value = 111, char value=o
: hexadecimal value = 20, int value = 32, char value=
: hexadecimal value = 57, int value = 87, char value=W
: hexadecimal value = 6F, int value = 111, char value=o
: hexadecimal value = 72, int value = 114, char value=r
: hexadecimal value = 6C, int value = 108, char value=l
: hexadecimal value = 64, int value = 100, char value=d
: hexadecimal value = 21, int value = 33, char value=!
:
: Process returned 0 (0x0)   execution time : 0.312 s
: Press any key to continue.
: =================================================
:
: #include <iostream>
: using namespace std;
:
: char HexChar2Bin(char *HexStr);
: int Hex2Dec(char ch);
: int main()
: {
:     HexChar2Bin("48 65 6C 6C 6F 20 57 6F 72 6C 64 21");
:
:     return 0;
: }
:
: char HexChar2Bin(char HexStr[])
: {
:     char *Hex = strtok(HexStr, " ");
:  while ((Hex = strtok(NULL, " ")) != NULL)
:  {
:         int value;
:         value = (int)Hex2Dec(Hex[0])*16+Hex2Dec(Hex[1]);
:         char charValue = (char)value;
:
:         cout << "hexadecimal value = "<< Hex << ", int value = " << value
:              << ", char value=" << charValue << endl;
:     }
:     return 0;
: }
: int Hex2Dec(char ch)
: {
: if(ch >= '0' && ch <= '9') return (int)(ch - '0');
: if(ch >= 'A' && ch <= 'F') return (int)(ch - 'A' + 10);
: if(ch >= 'a' && ch <= 'f') return (int)(ch - 'a' + 10);
: return 0;
: }

+ -

관련 글 리스트
59946 strtok와 while 관련 가르쳐주세요. 박정용 3779 2010/01/25
59949     Re:strtok와 while 관련 가르쳐주세요. 둘리.CSIEDA 4076 2010/01/25
59948     Re:strtok와 while 관련 가르쳐주세요. 한수동 4575 2010/01/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.