본문 바로가기

Programming Study/C

문자와 문자열 관련 함수

데이터의 이동 수단이 되는 스트림

스트림이란?

  - '한 방향으로 흐르는 데이터의 흐름'

  - 스트림이란 단어에는 단 방향으로만 데이터의 전송이 이뤄진다는 뜻이 담겨 있다.

    실제로 입출력 스트림도 입력 스트림과 출력 스트림이 구분되어서 한 방향으로만 데이터의 흐름을 유지하고 있다.

 

 

운영체제에서 제공하는 소프트웨어적인(소프트웨어로 구현되어 있는)가상의 다리가 스트림이다.

다시 말해서, 운영체제는 외부장치와 프로그램과의 데이터 송수신의 도구가 되는 스트림을 제공한다.

 

스트림의 생성과 소멸

  - 콘솔 입출력을 위한 '입력 스트림'과 '출력 스트림'은 프로그램이 실행되면 자동을 생성되고,

    프로그램이 종료되면 자동으로 소멸되는 스트림이다.

  - 이 둘은 기본적으로 제공되는 '표준 스트림(standard stream)'이다.  표준스트림에는 '에러 스트림'도 존재한다.

    stdin    표준 입력 스트림    키보드 대상으로 입력

    stdout  표준 출력 스트림    모니터 대상으로 출력

    stderr   표준 에러 스트림    모니터 대상으로 출력

 

 

 

문자 단위 입출력 함수

 

문자 출력 함수 : putchar, fputc

  - 모니터로 하나의 문자를 출력할 때 일반적으로 사용하는 함수.

#include <stdio.h>

int putchar(int c);

int fputc(int c, FILE * stream);

 

-> 두 함수 모두 함수 호출 성공 시 쓰여진 문자정보가, 실패시 EOF 반환

putchar 함수

  - 인자로 전달된 문자를 모니터로 출력하는 함수

fputc 함수

  - 문자를 전송한다는 측면에서는 putchar함수와 동일.

  - 단, fputc 함수는 문자를 전송할 스트림을 지정할 수 있음.

     (stdout 뿐만 아니라 파일을 대상으로도 데이터 전송가능)

 

문자 입력 함수 : getchar, fgetc

  - 키보드로부터 하나의 문자를 입력 받을 때, 일반적으로 사용하는 함수.

#include <stdio.h>

int getchar(void);

int fgetc(FILE * stream);

 

->두 함수 모두 파일의 끝에 도달하거나 함수 호출 실패시 EOF 반환

getchar 함수

  - stdin으로 표현되는 표준 입력 스트림으로부터 하나의 문자를 입력받아서 반환하는 함수

fgetc 함수

  - 하나의 문자를 입력 받는 함수

  - 다만 문자를 입력받을 스트림을 지정할 수 있음.

 

문자 입출력에서의 EOF

EOF란?

 - End OF File의 약자로서, 파일의 끝을 표현하기 위해서 정의해 놓은 상수.

 - EOF는 -1로 정의된 상수.

 

키보드를 대상으로 하는 fgetc 함수와 getchar 함수는 두가지 경우 중 하나가 만족되었을 때 EOF를 반환

1. 함수 호출의 실패

2. Windows에서 CTRL+Z키, Linux에서 CTRL+D키가 입력되는 경우.

 

 

문자열 단위 입출력 함수

 

문자열 출력 함수 : puts, fputs

 - 모니터로 하나의 문자열을 출력할 때 일반적으로 사용하는 함수.

#include <stdio.h>

int puts(const char *s);

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

 

-> 성공 시 음수가 아닌 값을, 실패시 EOF반환

 

문자열 입력 함수 : gets, fgets

  - 키보드로 하나의 문자열을 입력할 때 일반적으로 사용하는 함수.

#include <stdio.h>

char *gets(char *s);

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

 

-> 파일의 끝에 도달하거나 함수 호출 실패 시 NULL 포인터 반환

 

 

표준 입출력과 버퍼

표준입출력 함수를 통해서 데이터를 입출력하는 경우, 해당 데이터들은 운영체제가 제공하는 '메모리 버퍼'를 중간에 통과.

여기서 말하는 '메모리 버퍼'는 데이터를 임시로 모아두는(저장하는) 메모리 공간이다.

 

 

키보드로 입력된 데이터가 입력 스트림을 거쳐서 입력버퍼로 들어가는 시점은 엔터 키가 눌리는 시점.

 

'버퍼링(Buffering)'을 하는 이유는?

  - '데이터 전송의 효율성'과 관련이 있다.

 

출력 버퍼를 비우는 fflush 함수

  - 출력버퍼가 비워진다는 것은 출력 버퍼에 저장된 데이터가 버퍼를 떠나서 목적지로 이동됨을 뜻함.

  - 버퍼가 비워지는 시스템에 따라 버퍼의 성격에 따라 달라지는데, 시점이 동일하지 않기 때문에 fflush 함수 이용.

#include <stdio.h>

int fflush(FILE * stream);

 

->함수호출 성공 시 0, 실패 시 EOF 반환 

 

입력버퍼의 비워짐?

  - 입력버퍼의 비워짐은 데이터의 소멸을 의미한다.

 

 

문자열의 길이를 반환하는 함수 : strlen

#include <string.h>

size_t strlen(const char *s)

 

-> 전달된 문자열의 길이를 반환하되, 널 문자는 길이에 포함하지 않음.

 

문자열을 복사하는 함수들 : strcpy, strncpy

#include <string.h>

char * strcpy(char *dest, const char *src);

char * strncpy(char *dest, const char *src, size_t n);

 

-> 복사된 문자열의 주소 값 반환

 

문자열을 덧붙이는 함수들 : strcat, strncat

#include <string.h>

char *strcat(char *dest, const char *src);

char *strncat(char *dest, const char *src, size_t n);

 

-> 덧붙여진 문자열의 주소 값 반환

 

문자열을 비교하는 함수들 : strcmp, strncmp

#include <string.h>

int strcmp(const char *s1, const char *s2);

int strncmp(const char *s1, const char *s2, size_t n);

 

-> 두 문자열의 내용이 같으면 0, 같지 않으면 0이 아닌 값 반환

 

그 이외의 변환 함수들

#include <stdlib.h>

int atoi(const char *src);              //문자열의 내용을 int형으로 반환

long atol(const char *src);           //문자열의 내용을 long형으로 반환

double atof(const char *src);       //문자열의 내용을 double형으로 반환

 

- 윤성우 저, 열혈강의 C프로그래밍 中 -

 

'Programming Study > C' 카테고리의 다른 글

구조체와 사용자 정의 자료형_2  (0) 2014.09.04
구조체와 사용자 정의 자료형_1  (0) 2014.09.04
함수 포인터와 void 포인터  (0) 2014.09.03
다차원 배열과 포인터  (0) 2014.09.03
포인터의 포인터  (0) 2014.09.03