C 언어에서 문자열을 다룰 때 표준 입출력 라이브러리인 stdio.h
를 사용하면 다양한 입력 및 출력 기능을 활용할 수 있습니다. 그중에서도 fputs
와 fgets
함수는 파일 및 표준 입력/출력 스트림에서 문자열을 다루는 데 매우 유용합니다. 이번 포스팅에서는 fputs
와 fgets
의 동작 방식과 예제 코드를 살펴보겠습니다.
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. fputs
와 fgets
을 활용한 파일 읽기/쓰기 예제
이제 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. fputs
와 fgets
사용 시 주의할 점
fputs
는 자동으로 개행 문자를 추가하지 않으므로, 필요하면"\n"
을 추가해야 합니다.fgets
는 개행 문자까지 읽기 때문에 문자열을 출력할 때 필요 없는 개행을 제거해야 할 수도 있습니다.fgets
는 NULL을 반환할 수 있으므로, 항상 반환값을 확인해야 합니다.- 파일을 열 때
fopen
의 반환값을 확인하여 실패 여부를 점검하는 것이 중요합니다.
5. 결론
fputs
와 fgets
는 C 언어에서 문자열을 입출력하는 데 매우 유용한 함수입니다. fputs
는 문자열을 출력 스트림으로 보내는 역할을 하며, fgets
는 입력 스트림에서 문자열을 읽어오는 역할을 합니다. 이번 포스팅에서는 이 두 함수의 기본적인 사용법과 예제 코드를 통해 동작을 이해해 보았습니다.
'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
C 표준 입출력 - `puts`와 `gets` (0) | 2025.02.03 |
---|---|
stdio.h 개요 및 기본 입출력 함수 `printf`, `scanf` (0) | 2025.02.02 |
C 언어 표준 라이브러리 개요 (0) | 2025.02.02 |