memcpy 문의입니다.
조회수 591회
파일에서 2명의 사람을 받아서, 각각 조회 후 파일에 출력하는 프로그램입니다.
학번|이름 의 구조로 된 파일을 한 줄 씩 읽음.
1번의 학번 정보를 가지고, 쿼리 조회하여 0~100건 정도의 정보가 조회됩니다.
앞의 학번과 이름은 파일에서 읽은 정보 (반드시 읽은정보로 출력해야되요) + 쿼리에서 읽은 결과정보를 출력합니다.
학번|이름|학과|교육명|담당교수|수업시작시작일자|수업종료일자|
그런데 2번 결과가 적은 것(?)은 잘 나와요
학번|이름|학과|교육명|담당교수|수업시작시작일자|수업종료일자|
근데.. 2결과가 많은 것은 학번,이름이 나오지 않습니다.
(공백)|(공백)|학과|교육명|담당교수|수업시작시작일자|수업종료일자|
왜 이렇게 나오는걸까요?
파읽읽는 부분은
fgets( buf, size, fp) != 0){
memset (readData, 0x00, sizeof(readData));
memcpy (readData, buf, strlen(readData)-1));
}
readData 가 학번|이름
부분이에요.
근데 잘 나오다가 안나오다가 일부 나오다가 안나오다가 합니다.
1 답변
-
전체 코드를 올리시면 다른분들께서 답변하기가 더 편할거 같네요.
우선 질문에 있는 코드
fgets( buf, size, fp) != 0){ memset (readData, 0x00, sizeof(readData)); memcpy (readData, buf, strlen(readData)-1)); }
에서
memcpy
함수의 3번째 인수가 잘못되었습니다.memcpy (readData, buf, strlen(readData)-1));
를memcpy (readData, buf, strlen(buf)));
로 고쳐야 합니다.아마도 별다른 예외처리를 하고 계시지 않을 것으로 생각되는데요. 현재 코드대로 라면
size
변수의 크기는 텍스트 파일의 한줄을 포함하도록 매우 커야 합니다. 만약 텍스트 파일의 한줄이 매우 길 경우 버그가 될 수 있구요. 또,readData
공간이strlen(buf)+1
보단 커야만 제대로 동작할 거에요.-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력