문자열 입출력 함수
문자열은 여러 개의 문자가 차례로 나열된 것을 말한다.
‘T’는 영문 한 글자이지만
‘TEST’는 영문 한 글자들이 이어진 문자열이다.
영문 1글자는 1바이트 메모리에 저장이 가능하지만,
‘TEST’인 영문 4글자라는 문자열을 저장하려면
적어도 4바이트 이상의 메모리가 필요하다.
따라서 자료형이 char형인 변수가 적어도 4개는 있어야 한다.
char의 자료형은 1바이트 메모리 크기를 가지고 있기 때문이다.
ch라는 변수를 숫자를 붙여가면서
4개를 표현하면 ch1, ch2, ch3, ch4
이런식의 코드도 가능하지만
배열이란 것을 사용하면 더 간단하게 코드를 표현할 수 있다.
배열은 동일한 자료형의 변수 여러 개를
한 묶음으로 사용하는 문법이다.
‘TEST’라는 char형 변수 4개를 선언하는 코드는
“char ch[4];”라고 선언을 하면
자료형이 char인 변수 4개가 선언이 되고
메모리 4바이트가 확보가 된다.
이 배열이 만약에 ‘ch라는 변수(식별자)’의 메모리의
주소가 ‘0x0000FF60‘이라면
이 주소의 메모리에 ‘T’라는 문자가 저장되고
바로 다음 주소인 '0x0000FF61'에 ‘E’라는 문자가 저장되는 식으로
식별자의 메모리 주소부터 시작하여 차례대로 입력된 정보가 저장되는 것이다.
그리고 C언어에서 문자열의 끝은 널(null)이고 null은 ‘0’이다.
그래서 모든 문자열은 '0'으로 끝난다.
따라서 사용자가 ‘TEST’라는 문자열 입력하면
문자열의 끝에 ‘0’이 붙어 있다고 생각하면 되고
이때 ‘0’은 1바이트 정수이다.
따라서 ‘TEST’라는 문자열의 배열을 사용하기 위해서는
자료형이 char형인 변수가 최소 5개가 확보되어야 되고,
이 말은 최소 5바이트 이상의 메모리가 확보되어야 된다는 말이다.
따라서 ‘TEST’라는 문자열을 입력받기 위해서는
“char ch[5];”이렇게 코드를 작성하고
이것이 실행되면 메모리가 5바이트 확보가 되며
문자열을 입력받을 때 ‘TEST’라고 입력하면
식별자의 메모리 주소부터 시작하여 1바이트마다
‘T, E, S, T, 0'이라는 문자가 저장되는 것이다.
예를 들어 자료형이 char인 변수 ch의 주소가
위에 적은대로 '0x0000FF60’이라면
0x0000FF60 : T
0x0000FF61 : E
0x0000FF62 : S
0x0000FF63 : T
0x0000FF64 : 0
이런식으로 저장이 된다.
char Name[4] = {“ABC”};
이렇게 선언했다고 하면 확보한 4바이트의 메모리에
1바이트 메모리마다 A, B, C, 0 이렇게 저장이 되고,
이때 저장된 A의 메모리 주소
(16진수, 예컨대 0x0000FF60)에 Name라는 배열의 이름이 부여된다.
배열을 선언하면서 4개의 변수(인스턴스)가 확보되었는데
배열의 이름은 하나이므로 확보된 4개의 메모리 중에서
대표되는 처음 시작되는 메모리의 주소에 배열의 이름을 부여하는 것이다.
* 참고 *
개념(이론, 형식) → 사실(실제화)
인스턴스 : 개념 or 형식의 실질적 사례 or 실제사례. 변수라고도 함
물론 개념이 터무니없고 형식에 어긋나면 인스턴스화가 되지 않을 것이다
ex) 한글이라는 프로그램은 하나지만 여러 개를 실행할 수 있는데
그 각각을 인스턴스라 한다
각각 실행된 것을 한글프로그램의 인스턴스이다 라고도 표현할 수 있음
“int a;” ‘a’는 int형에 대한 인스턴스(변수)이다.
* 배열은 여러 인스턴스의 집합체
* 배열의 이름은 주소에 붙고 그 주소로 식별되며
배열의 주소는 포인터에 담긴다
** 잘못알고 있는 것이 있으면 댓글로 알려주시면 감사하겠습니다! **
'프로그래밍 > C언어' 카테고리의 다른 글
형식 문자열 입출력 함수 ( scanf ) (2) (0) | 2018.06.05 |
---|---|
형식 문자열 입출력 함수 ( printf ) (1) (0) | 2018.06.04 |
문자열 입출력 함수 (gets / puts) (2) (0) | 2018.06.01 |
문자 입출력 함수 (_getch / _getche) (2) (0) | 2018.06.01 |
문자 입출력 함수 (getchar / putchar) (1) (0) | 2018.05.31 |