wrkbrs

[C언어 강의37] 파일 입출력 -3 (fgets, fputs) 본문

C

[C언어 강의37] 파일 입출력 -3 (fgets, fputs)

zcarc 2019. 10. 4. 01:30

안녕하세요 모프 입니다.

 

전의 강의까진 문자를 하나씩밖에 읽고 쓰는것만 배웠습니다. 

 

그래서 여러개의 문자를 읽고 쓰려면 반복문으로 다음과 같이 구현을 해야 합니다.

 

   

 

 

 

보시기에 조금 길수 있지만 녹색 네모와 파란 네모를 보시면 2개의 함수를 만들어 보았습니다. 

 

바로 "putstr"함수와 "getstr"함수입니다. 이 함수들의 기능은 문자열을 파일에 쓰고 읽는 함수입니다. 

 

그래서 메인 함수의 빨간 네모를 보시면 만들어낸 2개의 함수를 가지고 "Morph"라는 문자를 읽고 쓰고 있음을 보실수 있습니다. 

 

"getstr" 함수는 "fgetc"함수를 사용하여 문자열 읽기 함수로 만든것이고 "putstr"은 "fputc"함수를 사용하여 문자열 쓰기 함수로 만든것입니다.

 

결과 창과 파일에 저장된 문자를 보시면"Morph"라는 문자열이 저장되어 있음을 확인 할 수 있습니다. 

 

그런데 문자열 파일입출력을 하기 위해서 매번 이렇게 함수를 만들 필요는 없습니다. 

 

왜냐하면 이러한 함수를 이미 라이브러리에서 제공을 해 주기 때문입니다. 

 

바로 "fgets"함수와 "fputs"함수 입니다. 

 

그럼 바로 사용법을 알아보도록 하겠습니다.

 

1. fgets 함수를 사용해 보자

 

"fgets" 함수는 "fgetc"함수와 다 같습니다. 단 파일에서 문자 하나만이 아니라 문자열을 가져오는것에 차이가 있죠. "s"는 "string"의 줄임말입니다. 

 

함수 원형 : 

 

"fgets"의 복귀값은 당연히 문자열이겠죠? 문자열을 읽어오는 함수니깐요 ㅎㅎㅎ

 

그리고 매개변수의 첫번째는 문자열을 받을 변수를 넣어주면 됩니다. 

 

먼가 이상하죠?? 복귀값과 첫번째 매개변수에 들어갈 내용이 같습니다. 

 

둘다 파일에서 읽어온 문자열을 전달하지요. 

 

그래서 복귀값을 사용할지, 아니면 첫번째 매개변수에 문자열을 담아서 사용할지 마음에 드시는것을 사용하시면 됩니다. 

 

두번째 매개변수는 읽어올 문자열의 길이를 전달합니다.

 

세번째 매개변수는 파일포인터를 전달하면 되겠죠.

 

그렇다면 예제 코드를 살펴 보겠습니다. 

 

 

 

위 텍스트 파일을 먼저 보겠습니다. 2줄이 저장되어 있죠. "Morph's House" 한줄과 "Welcome" 한줄 총 두줄입니다. 

 

개행(줄바꿈)이 되었으니 눈에 보이지는 않지만 중간에 개행문자 "\n"이 있을 겁니다. 

 

자 그럼 코드에서 보겠습니다. 파일을 열때는 읽어야 하니깐 'r' 속성으로 열었습니다. 

 

빨간 네모를 보시면 "fgets"를 2번 사용하였습니다.

 

"fgets"는 "receiveStr"에 자신의 배열 크기만큼 문자열을 받아서 저장합니다. 

 

그리고 복귀값을 찍어 보았습니다. 

 

위 결과창에는 모든 결과가 다 찍혀서 뭐가 무엇을 찍었는지 잘 모르시겠지만은 결과창에서 

"Morph's House\n"은 첫번째 "fgets"가 찍었고, "Welcome"은 두번쨰 "fgets"가 찍습니다. 

 

이해가 안되시죠?

 

요약하자면 "fgets"함수는 "\n" 줄바꿈이 있다면 줄바꿈까지만 읽어서 온다는 사실입니다.  

 

그래서 첫번째 "fgets" 함수가 호출되었을때 "Morph's House\n" 까지 읽어 온것입니다.

 

 

[여기서 잠깐] - 물론 문자열 끝에는 자동으로 널(\0) 값을 넣어줍니다.

결국 "Morph's House\n\0" 이렇게 됩니다. 하지만 설명할때는 널 값은 생략하여 설명하도록 하겠습니다. 

 

그리고 녹색 네모를 보시면 마지막으로 저장된 "receiveStr"값도 출력해 보았습니다.

 

결과는 마지막 "fgets"함수로 받았던 "Welcome"을 출력하고 있죠. 

 

간단히 말해서 "fgets" 함수는 한 라인씩 읽어오게 되겠습니다. 

 

2. fputs 함수를 사용해 보자

 

"fputs"함수는 어떠한 동작을 하는지 이미 예측하신분들이 많으실겁니다. 

 

바로 문자열을 파일에 쓰는 겁니다. 

 

함수 원형 : 

 

함수원형을 보시면 복귀값은 정수값을 리턴합니다. 

 

복귀값이 0값이나 양수가 전달하면 파일에 잘 입력된것이고, -1이 전달하면 실패 했다는 의미가 되겠습니다. 

 

자 그럼 소스코드를 확인해 보겠습니다.

 

 

 

참 심플하죠? ㅎㅎ

 

우선 파일을 열때 "w" 속성으로 열었습니다. 쓰기 전용 이죠

 

그리고 빨간 네모를 보시면 "fputs"함수를 사용하였습니다. 

 

원하는 문자열과 파일 포인터를 함께 매개변수로 넣어주었습니다. 

 

실행이 완료되어 출력창을 보시면 녹색 네모로 0값을 출력하고 있죠. 바로 파일 쓰기 성공이라는 소립니다.

 

그래서 텍스트 파일을 열어 보시면 바로 파란 네모처럼 문자가 입력되었음을 보실수 있습니다. 개행 문자도 제 역할을 잘 수행하였군요. 줄바꿈도 잘 되었습니다. 

 

그러면 2개의 "fputs"를 동시에 사용하면 어떻게 될까요?

 

 

 

뭐 코드는 비슷합니다. "fputs"함수를 두번 사용한것이 보이죠.

 

실행 완료 후 바로 텍스트 파일을 열어보았습니다. 

 

파란색 네모부분에 보시면 첫번째 "fputs"함수 입력 값에 이어서 두번째 "fputs"함수 입력 값이 순차적으로 잘 입력되었음을 확인 할 수 있습니다. 

 

간단하게 말해서 연속해서 "fputs"함수를 사용하면 입력값은 순차적으로 파일에 입력됩니다

 

 

ps. 아 소스 코드에 "fclose"함수를 써주지 않았습니다. 죄송합니다. 

스크린샷을 다시 찍히 귀찮아서 이렇게 추신으로 남깁니다. 

 

이렇게 해서 오늘도 2가지의 유용한 함수 사용법에 대해서 배워보았습니다. 

 

하지만 제가 알려 드린것은 지극히 사용법이지만 이러한 사용법을 가지고 응용하는 스킬을 배워야 합니다. 

 

이러한 스킬은 많이 프로그래밍을 많이 하는 방법밖에 없다는 것을 명심하시면서 강의를 읽어주시면 감사하겠습니다. 

 

 

 

[출처] [C언어 강의37] 파일 입출력 -3 (fgets, fputs)|작성자 모프