본문 바로가기

C Langauage

Chapter 9. 문자열(String)

Chapter 9. 문자열(String)
1. 문자열
 - 널(null) 문자로 끝나는 연속된 문자들의 모임
 - 문자 상수와 문자열 상수 비교

비교대상

형태

표기법

처리방법

특징

문자

한 글자

''

'a'

정수로 처리

아스키코드와 대응

문자열

두 글자 이상

""

"abc"

주소로 처리

문자열 끝 널문자 추가

 

2. 문자열 처리 방법
 - 배열을 통한 문자열 처리
  · C언어는 문자열을 처리하는 데이터형이 없어 배열을 이용하는데 문자열의 끝을 표시하기 위해 마지막 인덱스를  널 문자(\0)로 처리해야하며 저장하고자하는 문자열보다 배열의 크기를 1크게 해야 한다.
  · 초기화는 중괄호({}) 또는 큰따옴표("")를 이용한 방법이 있으며 중괄호({})는 끝 널 문자를 따로 저장해줘야 하고 큰따옴표("")를 이용한 초기화는 따로 널 문자를 저장할 필요가 없다.
 - 포인터를 통한 문자열 처리
  · C언어의 문자열은 char형 배열로 선언되기 때문에 배열의 시작점인 첫 번째 인덱스가 문자열의 시작점이 되며 이 인덱스가 문자열의 시작 주소가 되며 char형 포인터 변수는 문자열 주소를 저장할 수 있다.
  · 문자열은 배열과 특성이 대부분 같기 때문에 포인터 변수에 의해 접근은 가능하지만 값을 수정하는 것이 불가능한 특징은 같다.
  · 문자열을 수정이 아닌 읽기 기능만 필요한 경우 포인터를 사용하면 포인터는 크기가 4byte 밖에 차지 하지 않기 때문에 메모리를 효율적으로 사용할 수 있다.

 

3. 문자열 입출력 함수
 - 문자열 출력

 printf(const char * s, ……);
 puts(const char * s, ……);
 fputs(const char * s, ……, FILE * stream);

  · 매개변수로 전달되는 문자열을 화면에 출력한다.
  · printf puts는 사용하는 형식과 기능이 같지만 puts는 문자열만 해당한다.
  · fputs는 파일 입출력과 관련된 함수이며 puts는 출력 후 자동으로 개행이 이루어지지만 fputs는 출력 후 자동으로 개행이 이루어지지 않는다.
   ※ Chapter 13.참고
 - 문자열 입력

 scanf(const char * s, ……);
 gets(char * s, ……);
 fgets(char * s, int n, FILE * stream);

  · 키보드로 입력되는 문자열을 변수에 저장하는 함수들이다.
  · scanfgets의 차이점은 scanf는 빈칸을 포함하지 못하며 gets는 포함할 수 있다.
   또한 gets는 입력되는 문자열의 길이가 배열을 넘어설 경우 할당 받지 못하는 메모리를 참조하는 오류가 발생한다.
  · fgets는 파일 입출력과 관련된 함수이다.
   ※ Chapter 13.참고

 

4. 문자열 함수
 - string.h 포함 함수

 #include <string.h>

  · 아래의 문자열 함수를 사용하기 위해서는 string.h이란 헤더 파일을 포함해줘야 한다.
  · strlen

 size_t strlen(const char *s);

  ◦ 문자열의 길이를 반환(return)하는 함수
  ◦ 전달된 문자열의 길이를 반환하되, 널 문자의 길이에 포함하지 않는다.
  · strcpy

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

  ◦ src의 문자열을 dest문자열에 복사
  ◦ 복사된 문자열(dest)의 주소 값 반환(return)
  · strncpy

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

  ◦ src의 문자열에서 n의 수만큼만 dest문자열에 복사
  ◦ 복사된 문자열(dest)의 주소 값 반환(return)
  · strcat

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

  ◦ src의 문자열을 dest 문자열에 이어붙이는 함수
  ◦ 덧붙여진 문자열(dest)의 주소 값 반환(return)
  · strncat

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

  ◦ src의 문자열에서 n의 수만큼만 dest문자열에 복사해 이어붙이는 함수
  ◦ 덧붙여진 문자열(dest)의 주소 값 반환(return)
  · strcmp

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

  ◦ 문자열 s1과 문자열 s2 전체를 비교
  ◦ 비교할 때는 ASCII코드 값을 근거로 비교
  ◦ 두 문자열(s1, s2)의 내용이 같으면 0을, 같지 않고 s1이 클 때는 0보다 큰 값을, s2가 클 때는 0보다 작은 값을 반환(return)
  · strncmp

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

  ◦ 문자열 s1과 문자열 s2의 처음부터 n번째까지만 비교
  ◦ 비교할 때 는 ASCII코드 값을 근거로 비교
  ◦ 두 문자열(s1, s2)의 처음부터 n번째까지의 내용이 같으면 0을, 같지 않고 s1이 클 때는 0보다 큰 값을, s2가 클 때는 0보다 작은 값을 반환(return)
 - stdlib.h 포함 함수

 #include <stdlib.h>

  · 아래의 문자열 함수를 사용하기 위해서는 stdlib.h이란 헤더 파일을 포함해줘야 한다.
  · atoi

 int atoi(const char * str);

  ◦ 문자열의 내용의 숫자를 정수(int) 숫자로 형 변환을 해준다.
  · atol

 long atol(const char * str);

  ◦ 문자열의 내용의 숫자를 정수(long) 숫자로 형 변환을 해준다.
  · atof

 double atof(const char * str);

  ◦ 문자열의 내용의 숫자를 실수(double) 숫자로 형 변환을 해준다. 


'C Langauage' 카테고리의 다른 글

Chapter 11. 구조체(Struct)  (0) 2015.08.05
Chapter 10. 전처리기(Preprocessor)  (0) 2015.08.05
Chapter 8. 포인터(Pointer)  (0) 2015.08.05
Chapter 7. 함수(Function)  (0) 2015.08.05
Chapter 6. 배열(Array)과 문자열(String)  (0) 2015.08.05