sscanf 관련 오류
글쓴이: jazzsir / 작성시간: 월, 2011/10/31 - 9:58오전
파일에서 한줄을 읽어 드려서 구분자(#)로 잘라서 구조체에 넣는 코드인데요.
이상하게 정해놓은 크기대로 안들어 가네요..
문제의 전체 코드는 아래와 같고
sscanf(buf,"%33[^#]#%33[^#]#%4[^#]#%4[^#]#%4[^#]#%33[^#]#%4[^#]#%4[^#]#%33[^#]#%4[^#]#%4[^#]#%33[^#]#%4[^#]#%4[^#]#%4[^#]#%4[^#]#%4[^#]#%100[^#]#%4[^#]#%10[^#]#%4[^#]#%4[^#]#%81[^#]#%129[^#]#%129[^#]#%33[^#]#%33[^#]#%129[^#]#%129[^#]#%30[^#]#%30[^#]#%30[^\n]", PBdb.SortKey, PBdb.Name, PBdb.DnSsc_Count, PBdb.PhoneType_1, PBdb.SpeedDialNo_1, PBdb.pDnSsc_1, PBdb.PhoneType_2, PBdb.SpeedDialNo_2, PBdb.pDnSsc_2, PBdb.PhoneType_3, PBdb.SpeedDialNo_3, PBdb.pDnSsc_3, PBdb.DefaultNumber, PBdb.GroupID_1, PBdb.GroupID_2, PBdb.GroupID_3, PBdb.Email_Count, PBdb.Email_Info, PBdb.CalenderType, PBdb.nYear, PBdb.nMonth, PBdb.nDate, PBdb.pMelodyFilename, PBdb.pHomePage, PBdb.pHomeAddr, PBdb.pOrganization, PBdb.pTitle, PBdb.pOfficeAddr, PBdb.pMemo, PBdb.LUID, PBdb.LastModifiedTime, PBdb.LastSync);
문제가 되는 부분은 PBdb.nMonth,PBdb.nDate입니다.
문제가 되는 부분을 추출해 보면
위 코드상에 sscanf에서 정의된 부분은 아래와 같고,
(앞부분 생략)%10[^#]#%4[^#]#%4[^#]#%81[^#]#(뒷부분 생략)
파일에 데이터가 아래처럼 들어 가 있으면
(앞부분 생략)2000#12#31#/home/MEDIA/Midis/RT/Ring002.mmf#(뒷부분 생략)
결과가 아래와 같이 나옵니다.
PBdb.nYear 는 "2000" 으로 제대로 들어가는데
dbPB.nMonth 는 "12" 가 아닌 "1231/home/MEDIA/Midis/RT/Ring002.mmf"
dbPB.nDate 는 "31" 이 아닌 "31/home/MEDIA/Midis/RT/Ring002.mmf"
dbPB.pMelodyFilename은 "/home/MEDIA/Midis/RT/Ring002.mmf"으로 제대로 들어감
왜 이렇게 되는것일까요???
문제가 되는 부분만 따로 떼서 테스트 해보면 제대로 됩니다.
코드상엔 분명 문제가 없는데 도저히 모르겠네요.
Forums:
nMonth 필드와 nDate 필드가 딱 두 바이트
nMonth 필드와 nDate 필드가 딱 두 바이트 크기로 선언돼 있어서 널바이트가 들어갈 공간이 없는 게 (좀 더 정확히는, 널바이트가 덮어쓰여진 게) 아닐까요?
$PWD `date`
근데 1byte짜리 다른 항목들은 제대로 들어
근데 1byte짜리 다른 항목들은 제대로 들어 갔거든요.. 흠....에고에고..
댓글 달기