test.txt 파일에 저장된 데이터의 일부를 저장하는 프로그램

김도현 KimDohyun·2024년 10월 29일
0

I am Incheol Shin(여러분 이름) 이 저장된 test.txt 파일에서 이름부분만 남기는 프로그램을 작성하여 제출(Makefile 포함)하시오.

네 번째 과제는 fgets 를 사용해서 문자열을 처리하는 것이다.

내 이름 "I am Dohyun Kim"이 저장된 test.txt 파일을 buffer에 저장하고, buffer에서 "Dohyun Kim"을 찾아서 해당 위치 포인터를 반환하면 된다.

개요

fgets()란?

char *fgets(char *str, int n, FILE *stream);

파일로부터 문자열을 읽어오는 함수이며, 원형은 위와 같다.

  • str : 읽어온 문자열을 저장할 버퍼
  • n : 읽어올 최대 문자 수 (버퍼 크기)
  • stream : 데이터를 읽어올 파일 포인터

특징

  1. fgets는 한 줄을 읽고 개행 문자(\n)도 포함하여 문자열로 저장한다.
  2. 파일의 끝에 도달하거나 오류가 발생하면 NULL을 반환한다.
  3. 최대 n-1개의 문자를 읽고, 마지막에 널 종료 문자(\0)를 추가한다.

구현

test.txt 파일


사진과 같이 "I am Dohyun Kim" 을 작성하고 저장한다.

name.c 소스 코드 작성

  1. 먼저 fopen() 으로 파일을 읽기 모드로 열고 fgets() 로 파일을 읽은 후 버퍼에 저장한다. 버퍼의 사이즈를 100으로 설정했으므로 최대 100자까지 읽을 수 있다.
		FILE *file;
        char buffer[100];
        char *name;

        file = fopen("test.txt", "r");
        if (file == NULL) {
                printf("cannot open this file.\n");
                return 1;
        }

        fgets(buffer, 100, file);
        fclose(file);
  1. 버퍼에서 "Dohyun Kim"을 검색하고, 찾으면 그 위치의 포인터를 name 에 저장한다. 만약 "Dohyun Kim"이 발견되지 않으면 NULL을 반환한다.
name = strstr(buffer, "Dohyun Kim");
  1. name 이 NULL이 아닐 때, 즉 "Dohyun Kim"을 찾은 경우에 printf("%s", name); 이 실행되어 이름의 시작부터 끝까지 출력한다. 찾지 못한 경우에는 else문이 출력된다.
if (name != NULL)
                printf("%s", name);
        else
                printf("cannot find name.\n");

최종 코드

#include <stdio.h>
#include <string.h>

int main() {
        FILE *file;
        char buffer[100];
        char *name;

        file = fopen("test.txt", "r");
        if (file == NULL) {
                printf("cannot open this file.\n");
                return 1;
        }

        fgets(buffer, 100, file);
        fclose(file);

        name = strstr(buffer, "Dohyun Kim");
        if (name != NULL)
                printf("%s", name);
        else
                printf("cannot find name.\n");

        return 0;
}

makefile 작성

위 코드를 컴파일할 makefile을 작성한다.

CC = gcc
CFLAGS = -Wall

SRC = name.c
TARGET = name

$(TARGET): $(SRC)
        $(CC) $(CFLAGS) -o $(TARGET) $(SRC)

clean:
        rm -f $(TARGET)

최종 결과

make -f name_mk
chmod +x name
./name

위 코드로 makefile 빌드 후 생성된 실행 파일에 실행 권한을 주고 실행한다.

잘 나온다.
끝.

0개의 댓글

관련 채용 정보