문자열은 포인터로 처리된다.
c언어에서는 문자열 마지막에는 항상 '\0' 널 문자가 있기 때문에 배열 선언시 + 1칸 더해줘야 한다.
c언어에서 널문자로 문자열 끝임을 인지한다.
몰론 널 문자 없이 꽉꽉 채워 저장할 수는 있지만, 그 경우 문자열로서 가치는 사라진다.
char v[4] = "ABC" ; vs const char* v = "ABC";
배열을 하나 만들고 네글자를 삽입하는 방식 vs 포인터를 이용해 문자열 상수를 가리키는 방식이다
무슨 차이가 있을까?
const char* v = "ABC";
포인터로 문자열을 가리키는 것부터 알아보자!
"ABC"는 코드상에서 리터럴로 메모리에서 읽기 전용의 데이터 세그먼트 영역에 저장된다.
포인터는 리터럴의 주소를 가리키게 되고 따라서 수정이 불가능하다.
const는 해당 데이터가 변경되지 않음을 보장한다.
char v[4] = "ABC";
배열을 선언하고 초기화를 할 경우, 해당 리터럴이 배열이 저장되어 있는 메모리 공간에 복사가 되어 저장된다.
- Static : 전역 변수일 경우
- Stack : 지역 변수일 경우
어느 곳이든 둘다 수정이 가능하다.
따라서 char v[4] = "ABC" ; vs const char* v = "ABC" 는 포인터가 가리키고 있는 메모리 영역이 다르며, 그 차이에 따라서 수정 여부가 달라진다.
'C language' 카테고리의 다른 글
c 구조체, 유니온, typedef, 패딩, 비트필드 (0) | 2024.12.13 |
---|---|
고정길이 정수 - stdint.h (0) | 2024.12.13 |
c언어로 shell script 실행하기 (0) | 2024.12.12 |
make 문법, makedepend (0) | 2024.12.11 |
c언어 빌드(build) 과정과 make, cmake 소개언어 빌드(build) 과정과 make, cmake 소개 (0) | 2024.12.11 |