강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

새싹비빔밥님의 프로필 이미지
새싹비빔밥

작성한 질문수

홍정모의 따라하며 배우는 C언어

13.6 파일 임의 접근

13.6강 2분 8초경 fseek(fp,2L,SEEK_SET)함수에 질문있습니다.

해결된 질문

작성

·

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 );

본 강의에서 나온 것처럼 originSEEK_SET으로 주어진 경우, 시작점으로부터 offset 만큼 떨어진 곳으로 position을 이동시킵니다. 이때 offset은 단순히 움직일 바이트의 수를 의미하며, 값이 2L이라면 2바이트 이동하는 것이 됩니다.

그리고 텍스트 파일에서 일반적으로 문자 하나의 크기는 1바이트입니다. fseek의 두 번째 인자에 int 값을 전달할 수는 있지만, 암시적으로 long으로 형변환되어 전달됩니다.

강의 영상에서 2L과 같이 long 리터럴을 사용한 것은 함수의 프로토타입을 준수하여 정확하게 인자의 타입을 맞춰 넣어준 것이라고 볼 수 있습니다.

 

추가로 궁금한 점이 있으시다면 질문주세요.

 

아하 그렇군요 감사합니당!

새싹비빔밥님의 프로필 이미지
새싹비빔밥

작성한 질문수

질문하기