[완료]c++ strtok 문제
글쓴이: y10h23s / 작성시간: 수, 2011/08/10 - 5:00오후
char sentence[100]; char *tokenstr; cout<<"이름 전화번호 관계를 차례대로 입력해주세요.(이름/전화번호/관계)"<<endl; cin.getline(sentence,100); tokenstr = strtok(sentence,"/"); char *name = new char[strlen(tokenstr)+1]; strcpy(name,tokenstr); tokenstr = strtok(NULL,"/"); char *phone = new char[strlen(tokenstr)+1]; strcpy(name,tokenstr); tokenstr = strtok(NULL,"/"); char *relation =new char[strlen(tokenstr)+1]; strcpy(relation,tokenstr);
한줄로 입력받은 정보를 strtok으로 나눠서 각각 변수에 저장할려고 하는데..
cin.getline도 문제가 있는건가요? 저부분에서 런타임오류가 나네요..
sentence에 직접 문장을 저장하고 시작해보면 저장한 순서가 뒤죽박죽이고 어떤 곳엔 쓰레기값이 들어가있습니다.
Forums:
각 메모리를 초기화 하고 실행해보세.
cin.getline은 문제가 없어보입니다
1) char sentence[100] => 함수의 local variable은 초기화를 해줘야 합니다.
2) char* phone = new char[strlen(...) + 1]
strcpy는 NULL까지 복사를 하죠. 그래서 동적할당한 메모리를 초기화할 필요가 없습니다.
여담으로, strtok는 thread safety문제가 있어서 POSIX에서는 strtok_r 버전이 따로 있지요. 그리고 modern c++를 쓴다면 strtok 말고 다른 깔끔한 방법을 쓸겁니다.
Life rushes on, we are distracted
cin.getline은 앞에 cin.ignore을
cin.getline은 앞에 cin.ignore을 써넣으니깐 런타임 오류없이 작동되는데 뒤에 토큰문제는
1/2/3으로 입력한다면 2/쓰레기/3 이런식으로 입력됩니다..
tokenstr =
위부분에서 strcpy(name,tokenstr); 부분이 잘못 되었네요^^
strcpy(phone,tokenstr); 라고 해야...
예 결국 그게 문제였습니다. 저도 어제
예 결국 그게 문제였습니다.
저도 어제 찾고한참을...멍때렸네요.
감사합니다
댓글 달기