다루두루

블로그 이미지

차케요

공부하면서 정리하는 노트같은 블로그입니다.

C language puts, fputs, gets, fgets

C언어 알고리즘 2015. 9. 29. 23:23

C language puts / fputs


 c언어를 공부하면서 그동안 문자열을 입력받기 위해서 scanf() 함수를 이용했고 출력할 때는 printf()를 이용했었는데요. 이 scanf() 함수는 공백을 처리하지 못하는 단점이 있었습니다. 하지만 여기서 알아볼 입력 함수들은 공백도 처리하면서 문자열을 입력받을 수 있기 때문에 유용한데요. 먼저 문자열을 출력하는 puts와 fputs부터 간단하게 알아보고 입력받는 gets와 fgets 함수를 살펴보겠습니다.


int puts(const char * s);

int fputs(const char * s, FILE * stream);


▲ puts 함수는 표준 스트림인 stdout을 대상으로 출력되지만 fputs 함수는 두 번째 인자를 통해서 출력의 대상을 변경할 수 있습니다. 이 두 함수의 공통점은 첫 번째 인자로 전달되는 주소의 문자열을 출력하는 건 같지만 출력하는 형식에서 조금 차이점이 있는데요. 예제를 통해서 확인해볼게요. 참고로 fputs() 함수의 두 번째 인자인 출력 대상은 stdout으로 지정하고 테스트해보겠습니다.

puts

▲ 둘의 차이점이 바로 확인되죠?? puts 함수는 문자열을 출력하고 자동으로 개행이 되는 반면 fputs 함수는 그렇지 않습니다. 이 녀석을 사용할 때는 개행할 때마다 printf("\n") 함수를 넣어줘야 하는 불편함이 있겠네요.

 

 

 다음은 공백 포함 문자열을 입력받을 수 있는 gets과 fgets 형식입니다. 


gets(char * s);

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


■ 이 둘 중 gets 함수는 다소 한계가 있습니다. 이 녀석을 호출할때 다음과 같은 형식으로 호출을 하는데요.


char ch[5];

gets(ch);


▲ 5byte의 메모리 공간을 확보한 후 문자열을 입력받아서 ch에 저장하는데 만약에 5byte 이상의 문자가 입력되면 에러가 발생하게 됩니다. 그렇기 때문에 fgets 함수를 이용하는데요. 두 번째 인자로 sizeof(ch)를 넣어주면 ch의 길이-1만큼만 데이터를 읽어서 저장하게 됩니다. 이때 마지막 자리에는 문자열을 구분하기 위한 Null 문자를 입력하기 위한 자리입니다. 


 간단한 예제를 만들어서 확인해보고 마무리할게요.

fputs

▲ 5byte 공간을 확보하고 문자열을 입력받아서 저장했다가 다시 출력하는 내용인데 프로그램을 실행해서 꽤 길게 문자열을 입력했습니다. 하지만 5-1(Null)의 숫자인 4개만 저장된 걸 확인할 수 있습니다.


 이렇게 해서 C 언어에서 공백을 포함한 문자열을 입력받고 출력하는 함수 puts, fputs, gets, fgets에 대해서 알아봤습니다. 수고하셨어요.

저작자표시 비영리 변경금지 (새창열림)
Posted by 차케요

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

카테고리

NEW (900)
아이폰 개발 기초 (7)
취미 (16)
아두이노 (16)
[안드로이드] 어플만들기 (77)
안드로이드 기초 다지기 (61)
슈팅게임 만들기 (4)
[JAVA]자바 공부하기 (48)
C언어 알고리즘 (61)
[Unity3D]유니티3D 강좌 (7)
컴퓨터 (325)
포토샵CS2 강좌 (6)
유용한 프로그램 (244)
리눅스 노트정리 (22)
임베디드 리눅스 (11)
New블로그 (9)
음식의 효능 (4)
일반상식 (56)
HTML 공부 (40)
포토샵 공부 (36)
엑셀 (6)
파워포인트 공부 (19)
노트정리 (38)
일상 (33)
TV영화 (85)
방명록 : 관리자 : 글쓰기
차케요's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

다루두루

공부하면서 정리하는 노트같은 블로그입니다.

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • NEW (900)
    • 아이폰 개발 기초 (7)
    • 취미 (16)
      • 아두이노 (16)
    • [안드로이드] 어플만들기 (77)
      • 안드로이드 기초 다지기 (61)
      • 슈팅게임 만들기 (4)
    • [JAVA]자바 공부하기 (48)
    • C언어 알고리즘 (61)
    • [Unity3D]유니티3D 강좌 (7)
    • 컴퓨터 (325)
      • 포토샵CS2 강좌 (6)
      • 유용한 프로그램 (244)
    • 리눅스 노트정리 (22)
      • 임베디드 리눅스 (11)
    • New블로그 (9)
    • 음식의 효능 (4)
    • 일반상식 (56)
    • HTML 공부 (40)
    • 포토샵 공부 (36)
    • 엑셀 (6)
    • 파워포인트 공부 (19)
    • 노트정리 (38)
    • 일상 (33)
    • TV영화 (85)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바