memcpy 문의입니다.

조회수 590회

파일에서 2명의 사람을 받아서, 각각 조회 후 파일에 출력하는 프로그램입니다.

  1. 학번|이름 의 구조로 된 파일을 한 줄 씩 읽음.

  2. 1번의 학번 정보를 가지고, 쿼리 조회하여 0~100건 정도의 정보가 조회됩니다.

  3. 앞의 학번과 이름은 파일에서 읽은 정보 (반드시 읽은정보로 출력해야되요) + 쿼리에서 읽은 결과정보를 출력합니다.

학번|이름|학과|교육명|담당교수|수업시작시작일자|수업종료일자|

그런데 2번 결과가 적은 것(?)은 잘 나와요 학번|이름|학과|교육명|담당교수|수업시작시작일자|수업종료일자| 근데.. 2결과가 많은 것은 학번,이름이 나오지 않습니다.

(공백)|(공백)|학과|교육명|담당교수|수업시작시작일자|수업종료일자|

왜 이렇게 나오는걸까요?

파읽읽는 부분은

fgets( buf, size, fp) != 0){
 memset (readData, 0x00, sizeof(readData)); 
 memcpy (readData, buf, strlen(readData)-1));
}

readData 가 학번|이름 부분이에요. 근데 잘 나오다가 안나오다가 일부 나오다가 안나오다가 합니다.

  • 질문 내용만으로는 잘 모르겠네요. "학번|이름"은 하나고 쿼리 조회 결과는 여러개라서 두번째 row부터 누락된건 아닌가요? 3의 읽은정보와 결과정보를 합치는 부분을 어떻게 구현하셨는지 내용 추가해주시면 좋겠습니다. 알 수 없는 사용자 2020.7.23 19:27

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보단 커야만 제대로 동작할 거에요.

    • 마지막줄 수정합니다. readData 공간이 strlen(buf)+1 보다 크거가 같아야 합니다. 알 수 없는 사용자 2020.7.23 21:25

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)