해결된 질문
작성
·
73
1
안녕하세요, 13.6강 강의를 듣다가 의문이 생겨 질문 남깁니다.
2분 8초경 fseek(fp,2L,SEEK_SET) 함수를 사용하실 때 2L의 의미가 2 Long이며, 파일 내에서 "시작점으로부터 2바이트 떨어진 곳으로 이동한다"고 하셨습니다.
비주얼 스튜디오에서 Long의 사이즈는 4바이트로 알고 있는데 2L이면 8바이트 이동한 거 아닌가요? 파일 내 문자 하나의 크기가 4바이트라서 2L이면 2칸 이동한 건가요? 만약 그게 맞다면 long 대신 int를 사용해도 되는 건지까지도 궁금합니다.
감사합니다.
답변 1
1
안녕하세요? 질문&답변 도우미 durams입니다.
fseek
함수에 두 번째 인자로 전달된 값 2L
이라는 값에 대해 약간의 오해가 있으신 것 같습니다.
비주얼 스튜디오에서 사용하는 컴파일러인 MSVC에서 long
의 크기가 4바이트인것은 맞지만, 이것은 단지 해당 자료형을 나타내기 위해 사용되는 비트의 개수일 뿐입니다. 실제로 함수에서 사용하는 것은 자료형에 담긴 값이죠.
fseek
함수의 형태는 아래와 같습니다.
int fseek( FILE* stream, long offset, int origin );
본 강의에서 나온 것처럼 origin
이 SEEK_SET
으로 주어진 경우, 시작점으로부터 offset
만큼 떨어진 곳으로 position을 이동시킵니다. 이때 offset
은 단순히 움직일 바이트의 수를 의미하며, 값이 2L
이라면 2바이트 이동하는 것이 됩니다.
그리고 텍스트 파일에서 일반적으로 문자 하나의 크기는 1바이트입니다. fseek
의 두 번째 인자에 int
값을 전달할 수는 있지만, 암시적으로 long
으로 형변환되어 전달됩니다.
강의 영상에서 2L
과 같이 long
리터럴을 사용한 것은 함수의 프로토타입을 준수하여 정확하게 인자의 타입을 맞춰 넣어준 것이라고 볼 수 있습니다.
추가로 궁금한 점이 있으시다면 질문주세요.
아하 그렇군요 감사합니당!