글
(1) 문자열
: C에서 문자열을 다루는 변수를 선언하려면 문자(char)의 배열로서 선언해야 한다.
#include<stdio.h> int main() { char strvar[10] = "abcdef"; puts(strvar); return 0; } |
- C에서는 문자열의 마지막에 null(0) 값을 덧붙이는 방식을 사용하여 문자열의 끝을 판단합니다.
- 따라서 실제 문자 배열에 저장할 수 있는 문자수는 배열의 크기보다 하나가 적습니다.
a | b | c | d | e | f | null | ... | ... | ... |
(2) 문자 포인터와 문자 배열
: '배열과 포인터'부분에서 배열은 포인터로 대체할 수 있다고 하였다. 따라서 '문자의 배열'역시 '문자의 포인터'로 대체
할 수 있다.
#include<stdio.h> int main() { char *strvar = "abcdef"; puts(strvar); return 0; } |
- 다음과 같이 strvar문자배열을 '*'를 붙여 포인터 문자 배열로 수정해도 결과는 같다.
하지만!!
#include<stdio.h> int main() { char *strvarA; char strvarB[10]; strvarA = "abcdef"; strvarB = "abcdef"; return 0; } |
- 다음과 같은 경우 strvarB = "abcdef"; 부분에서 에러가 발생한다.
- 변수 선언시에 초기값으로 바로 대입하면 에러가 발생하지 않는데, 선언 이후에 대입 하려고 하면 에러가 발생한다.
이유는!
- C에서 " "로 둘러쌓인 문자열 리터럴의 타입이 바로 char* 이다. 즉 문자열 리터럴 자체가 문자의 포인터로 구현되어 있는 것.
- 따라서 같은 포인터 타입 변수인 strvarA에 대해서는 바로 대입이 가능하지만, 배열 변수에 포인터 값을 할당하는 것은 불가능 하다.
- 배열은 항상 자신의 첫번째 원소(arr[0])에 대한 주소값을 기억하고 있어야하고, 변경할 수 없는 상수형 포인터 이기 때문이다.
배열에 문자열을 대입하기 위해서는 복사(COPY)를 하면 된다.
#include<stdio.h> #include<string.h> int main() { char *str[10]; strcpy(str, "abcdef"); puts(str); return 0; } |
- char*형 변수에 대해서도 마찬가지로 strcpy() 함수를 통해 복사하는 방식으로 대입할 수 있다.
※ 참고자료 : http://2xx195.tistory.com/category/Programming/C?seq=6
'P rogramming > C Language' 카테고리의 다른 글
문자열 변수와 문자열 상수 (1) | 2011.10.27 |
---|---|
typedef - 자료형의 치환 (0) | 2011.10.26 |
2차원 배열과 포인터 이론 (4) | 2011.10.26 |
1차원 배열과 포인터 이론 (0) | 2011.10.26 |
포인터 이론 (0) | 2011.10.26 |
RECENT COMMENT