C언어에서의 문자열
아래 둘은 같은 표현 |
char intro[10] = "introduce"; |
char intro[10] = { 'i', 'n', 't', 'r' , 'o', 'd', 'u', 'c', 'e', '\0' }; |
char *intro = "introduce"; |
- 문자열은 배열이다.
- 문자열 뒤에는 널문자가 더해진다.
- 따라서 문자열의 길이를 알려면 널문자를 빼면 된다.
- 문자열은 그 문자열의 시작되는 주소를 가르킨다. (배열로 생각하면 된다.) -->ex) arr는 &arr[0]으로 첫번째 주소 및 배열의 주소가 된다.
<C언어에서 문자열 및 결과>
배열로 선언한 ptr3만 주소가 다르다. ptr은 주소이자 문자열이다.
배열 형태로 초기화 할 경우 문자가 바뀐다.
포인터 (ptr1)로 초기화 할 경우 오류가 난다.
그 원소의 값이 변경 가능한지 변경 불가능한지는 배열과 포인터 형식의 차이이다.
<C++ 에서의 문자열 및 결과>
C언어와 마찬가지로 배열 형태에서만 주솟값이 다르게 나온다.
그냥 ptr이라고 하면 문자열이 출력되기 때문에 (void*)ptr1 으로 형변환을 해서 주솟값을 바꿔줘야
주솟값을 출력할 수 있다.
2021-09-21 문자열 포스팅 내용 추가
위에 언급했던 배열 형태로 초기화 할 경우 문자가 바뀌고, 포인터 (ptr1)형태 로 초기화 할 경우 오류가 난다.
그 원소의 값이 변경 가능한지 변경 불가능한지는 배열과 포인터 형식의 차이였다.
동적할당을 공부하면서 strcpy 함수를 사용하게 되었고, 이 또한 char* strData; 형태로 문자열을 선언하기 때문에 strcpy 함수를 사용하여 복사가 되지 않는다.
'프로그래밍 > C언어' 카테고리의 다른 글
[c언어] 구조체 선언 과 초기화 (0) | 2021.09.30 |
---|---|
[C언어]위키백과 연산자 (0) | 2021.09.16 |
[C언어]포인터 상수와 상수 포인터(const int* 와 int* const) (0) | 2021.09.07 |
[C언어]typedef와 구조체 (0) | 2021.09.05 |