프로그래밍/C언어

[C++, C] 문자열

FORHAPPy 2021. 9. 17. 14:40

C언어에서의 문자열

 

 아래 둘은 같은 표현
char intro[10] = "introduce";
char intro[10] = { 'i', 'n', 't', 'r' , 'o', 'd', 'u', 'c', 'e', '\0' };
char *intro = "introduce";
  1. 문자열은 배열이다.
  2. 문자열 뒤에는 널문자가 더해진다.
  3. 따라서 문자열의 길이를 알려면 널문자를 빼면 된다.
  4. 문자열은 그 문자열의 시작되는 주소를 가르킨다. (배열로 생각하면 된다.)                                                         -->ex) arr는 &arr[0]으로 첫번째 주소 및 배열의 주소가 된다.

<C언어에서 문자열 및 결과>

배열로 선언한 ptr3만 주소가 다르다.  ptr은 주소이자 문자열이다.

 

배열 형태로 초기화 할 경우 문자가 바뀐다.

포인터 (ptr1)로 초기화 할 경우 오류가 난다.

그 원소의 값이 변경 가능한지 변경 불가능한지는 배열과 포인터 형식의 차이이다.


<C++ 에서의 문자열 및 결과>

 

C언어와 마찬가지로 배열 형태에서만 주솟값이 다르게 나온다.

그냥 ptr이라고 하면 문자열이 출력되기 때문에 (void*)ptr1 으로 형변환을 해서 주솟값을 바꿔줘야

주솟값을 출력할 수 있다.

 

 


2021-09-21 문자열 포스팅 내용 추가 

 

위에 언급했던 배열 형태로 초기화 할 경우 문자가 바뀌고, 포인터 (ptr1)형태 로 초기화 할 경우 오류가 난다.

그 원소의 값이 변경 가능한지 변경 불가능한지는 배열과 포인터 형식의 차이였다.

 

동적할당을 공부하면서 strcpy 함수를 사용하게 되었고, 이 또한 char* strData; 형태로 문자열을 선언하기 때문에 strcpy 함수를 사용하여 복사가 되지 않는다.