c 언어/c 표준 라이브러리(Standard C Library)

C 언어 표준 입출력 - `fputs`와 `fgets` 사용법

임베디드 친구 2025. 2. 4. 08:58
반응형

C 언어에서 문자열을 다룰 때 표준 입출력 라이브러리인 stdio.h를 사용하면 다양한 입력 및 출력 기능을 활용할 수 있습니다. 그중에서도 fputsfgets 함수는 파일 및 표준 입력/출력 스트림에서 문자열을 다루는 데 매우 유용합니다. 이번 포스팅에서는 fputsfgets의 동작 방식과 예제 코드를 살펴보겠습니다.

1. fputs 함수

fputs 함수는 문자열을 출력 스트림(파일 또는 표준 출력)으로 출력하는 기능을 합니다. printf와 달리 서식 문자열을 지원하지 않으며, 개행 문자(\n)가 자동으로 추가되지 않습니다.

fputs 함수의 프로토타입

#include <stdio.h>
int fputs(const char *str, FILE *stream);

매개변수

  • str : 출력할 문자열
  • stream : 출력할 스트림 (stdout 또는 파일 포인터)

반환값

  • 성공 시 0 이상의 값을 반환
  • 실패 시 EOF 반환

fputs 예제 코드

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        perror("파일 열기 실패");
        return 1;
    }

    fputs("Hello, World!", file);
    fputs("C 언어에서 fputs 함수를 사용해 보자.", file);

    fclose(file);
    return 0;
}

위 코드는 example.txt 파일을 생성하고, fputs를 이용해 문자열을 파일에 저장하는 예제입니다. 파일에 문자열을 기록한 후 닫아줍니다.

2. fgets 함수

fgets 함수는 입력 스트림(파일 또는 표준 입력)에서 문자열을 읽어오는 기능을 합니다. scanf와 달리 공백을 포함한 한 줄을 읽을 수 있으며, 최대 길이를 지정할 수 있어 버퍼 오버플로우를 방지할 수 있습니다.

fgets 함수의 프로토타입

#include <stdio.h>
char *fgets(char *str, int size, FILE *stream);

매개변수

  • str : 입력된 문자열을 저장할 버퍼
  • size : 읽을 최대 길이 (개행 문자 포함)
  • stream : 입력 스트림 (stdin 또는 파일 포인터)

반환값

  • 성공 시 str을 반환
  • 실패 시 NULL 반환

fgets 예제 코드

#include <stdio.h>

int main() {
    char buffer[100];

    printf("문자열을 입력하세요: ");
    if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
        printf("입력한 문자열: %s", buffer);
    }

    return 0;
}

위 코드는 사용자로부터 문자열을 입력받아 출력하는 프로그램입니다. fgets는 개행 문자(\n)까지 포함하여 읽으며, 입력 버퍼 크기를 초과하지 않도록 sizeof(buffer)를 설정하여 안전성을 보장합니다.

3. fputsfgets을 활용한 파일 읽기/쓰기 예제

이제 fputs로 파일에 문자열을 기록하고, fgets로 다시 읽어오는 예제를 살펴보겠습니다.

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        perror("파일 열기 실패");
        return 1;
    }

    fputs("Hello, World!\n", file);
    fputs("C 언어에서 파일 입출력을 연습합니다.\n", file);

    fclose(file);

    // 파일 읽기
    file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("파일 열기 실패");
        return 1;
    }

    char buffer[100];
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("읽은 내용: %s", buffer);
    }

    fclose(file);
    return 0;
}

실행 결과 (예제 실행 후 example.txt 내용)

Hello, World!
C 언어에서 파일 입출력을 연습합니다.

위 프로그램은 example.txt 파일을 생성하여 문자열을 기록한 후, 다시 파일을 열어 내용을 읽어 출력하는 방식으로 동작합니다.

4. fputsfgets 사용 시 주의할 점

  • fputs는 자동으로 개행 문자를 추가하지 않으므로, 필요하면 "\n"을 추가해야 합니다.
  • fgets는 개행 문자까지 읽기 때문에 문자열을 출력할 때 필요 없는 개행을 제거해야 할 수도 있습니다.
  • fgets는 NULL을 반환할 수 있으므로, 항상 반환값을 확인해야 합니다.
  • 파일을 열 때 fopen의 반환값을 확인하여 실패 여부를 점검하는 것이 중요합니다.

5. 결론

fputsfgets는 C 언어에서 문자열을 입출력하는 데 매우 유용한 함수입니다. fputs는 문자열을 출력 스트림으로 보내는 역할을 하며, fgets는 입력 스트림에서 문자열을 읽어오는 역할을 합니다. 이번 포스팅에서는 이 두 함수의 기본적인 사용법과 예제 코드를 통해 동작을 이해해 보았습니다.

반응형