21-1 스트림과 데이터의 전송


- 스트림이 있어야 프로그램과 입출력장치 사이에 입력과 출력이 가능하다.

- 콘솔 입출력 스트림은 자동으로 생성되고, 자동으로 소멸된다.

- 파일 입출력 스트림은 직접 생성시키고, 소멸시켜야 된다.


21-2 문자 입출력 함수

int putchar(int c);
-문자 c를 화면에 출력한다.

int fputc(int c, FILE* stream);
-문자 c를 stream으로 출력한다.

int getchar(void);
-키보드로부터 한 문자를 입력받는다.

int fputc(FILE* stream);
-stream으로부터 한 문자를 입력받는다.


-위 함수들에서 오류가 발생하거나 파일의 끝에 도달했을 경우, EOF를 리턴한다.
-EOF의 실제 값은 -1이다.

-문자 입출력 함수들은 printf나 scanf와 비교하여 간단한 작업밖에는 할 수 없으나 그만큼 가볍고 메모리를 덜 차지한다.


21-3 문자열 입출력 함수

int puts(const char* s);
-문자열 s를 모니터로 출력한다. 그 후 줄을 바꾼다.

int fputs(const char* s, FILE* stream);
-문자열 s를 stream으로 출력한다. 줄을 바꾸지 않는다.

char* gets(char* s);
-문자열 s를 키보드에서 입력받는다.

char* fgets(char* s, int n, FILE* stream);
-문자열 s를 stream에서 길이 n만큼 입력받는다.

-gets는 선언한 배열보다 큰 길이의 문자열이 들어오면 오버플로우가 발생한다. 
fgets는 n까지만 읽어들인다.

-fgets는 항상 NULL문자를 삽입해 준다. n보다 긴 문자열이 입력될 경우, n-1까지만 읽고 n번째에는 NULL문자를 삽입한다.


21-4 표준 입출력과 버퍼

- 표준 입출력 함수를 사용하는 경우에는 버퍼를 제공받는다.

- 버퍼를 사용하는 이유는 성능 향상을 위해서이다. 버퍼에 모아두었다가 한꺼번에 처리하는 것이다.

int fflush(FILE* stream);
- 버퍼를 비우는 함수. 입력스트림은 내용이 전부 지워지고, 출력스트림은 즉시 출력된다.

- fgets함수를 사용할 때, 입력받은 문자열이 함수에서 지정한 n보다 크다면, 나머지는 버퍼에 그대로 남아있게 된다. 이 때, fflush함수를 쓰면 그것들을 전부 버릴수 있다.



21-5 문자열 조작 함수

size_t strlen(const char* s);
-문자열 s의 길이를 리턴한다. 문자열의 마지막에 있는 NULL문자는 포함하지 않는다.

char* strcpy(char* dest, const char* src);
-src의 문자열을 dest로 복사한다. dest의 길이가 더 작으면 오버플로우가 발생한다.

char* strncpy(char* dest, const char* src, size_t n);
-src의 문자열을 길이n만큼만 dest로 복사한다. 마지막에 NULL문자를 따로 삽입해주어야한다.

char* strcat(char* dest, const char* src);
-src의 문자열을 dest의 뒤에 추가한다. dest의 길이를 초과하는 결과가 나올경우, 오버플로우가 생긴다.

char* strncat(char* dest, const char* src, size_t n);
-stc의 문자열을 dest의 뒤에 길이 n까지 추가한다. (n은 합친 후의 문자열의 총 길이)

int strcmp(const char* s1, const char* s2);
-문자열 s1과 s2가 같으면 0을 리턴, s1이 크면 양수를 리턴, s2가 크면 음수를 리턴한다.
-문자열이 더 크다는 것은 아스키 코드값을 비교한 결과이다. 사전순으로 뒤에 있을수록 큰 문자열이다.

int strncmp(const char* s1, const char* s2, size_t n);
-strcmp와 같지만 길이 n까지만 비교한다.

int atoi(char *ptr);
-문자열을 int형 데이터로 변환

int atol(char *ptr);
-문자열을 long형 데이터로 변환

int atof(char *ptr);
-문자열을 float형 데이터로 변환


+ Recent posts