[C] 문자열 파일 입출력 함수

kafkaaaa·2023년 9월 4일

C

목록 보기
1/1

#1. fwrite

size_t fwrite (const void* buf, size_t size, size_t count, FILE *stream);

stream에 데이터 쓰기

Parameters

  • const void *buf
    기록할 데이터가 저장된 배열
    void * -> 모든 자료형을 가리킬 수 있음
  • size_t size
    데이터 (배열 원소 하나의) 크기 (Byte)
  • size_t count
    저장할 데이터 개수
  • FILE *stream
    fopen 으로 얻은 FILE 포인터

Return value

  • 성공: count
  • 실패: count가 아닌 값

👀 size_t

= 이론상 가장 큰 사이즈를 담을 수 있는 unsigned data type (C99)

  • 이식성 문제 (CPU 레지스터 크기)
    • 32bit OS : unsigned 32bit 정수
    • 64bit OS : unsigned 64bit 정수
  • 반복문, 배열 index, length
  • sizeof( ) return type 등..
  • 📌 signed형 데이터와 연산 시 캐스팅 주의 (음수 -> 양수)


#2. fread

size_t fread (void* buf, size_t size, size_t count, FILE *stream);

stream에서 size길이의 count수 만큼 읽어서 buf에 저장
※ 저장할 버퍼는 0으로 초기화 해줘야 함

Parameters

  • void *buf
    데이터가 저장된 배열
  • size_t size
    데이터 (배열 원소 하나의) 크기 (Byte)
  • size_t count
    읽어들일 데이터 개수
  • FILE *stream
    fopen 으로 얻은 FILE 포인터

Return value

  • 성공: count
  • 실패: 실제로 읽어야 할 원소의 개수가 아닌 값 (count가 아닌 값)

#3. fprintf / fscanf

int fprintf (FILE* stream, const char* format, argument-list)

fprintf (파일 스트림, 서식 지정자, 인수)
스트림에 형식화된 데이터 쓰기

  • 성공: 출력한 문자 수
  • 실패: 음수 값
int fscanf (FILE* stream, const char* format, argument-list)

fscanf (파일 스트림, 서식 지정자, 인수)
스트림에서 형식화된 데이터 읽기

  • 성공: 읽어들인 문자 수
  • 실패 or 파일의 끝에 도달하면 EOF

#4. fputs / fgets

int fputs (const char* str, FILE* stream)

fputs (문자 배열, 파일 스트림)
str이 가리키는 문자열을 stream에 쓰기.
str이 \0(NULL)에 도달할 때 까지 스트림에 복사함.

  • 성공: 음이 아닌 수
  • 실패: EOF
char* fgets (char* str, int num, FILE* stream)

fgets (문자열 저장할 배열, 읽어들일 문자 수 - 1, 파일 스트림)
스트림에서 \n(개행) 까지 읽거나, (num-1)개의 문자 읽기.
읽어들인 결과를 str에 저장하고, 끝에 \0(NULL) 추가.

  • 성공: str(문자열 가리키는 포인터)
  • 실패 or EOF도달: NULL

#5. 차이점

  • fwrite는 \0(NULL)을 만나더라도 계속 출력하지만 fprintf는 종료.
  • fgets는 개행 문자(\n)를 만나면 읽기를 멈추고 끝에 자동적으로 \0(NULL) 추가해줌.
  • fread는 (\n)과 상관 없이 지정된 크기 만큼 읽음.
  • 일반 텍스트가 아닌 Binary Data를 처리하려면 fwrite/fread
  • 서식 지정이 필요한 경우 fscanf, fprintf
profile
일모도원

0개의 댓글