
배열의 문자열 초기화는 여러 가지 방법이 있는데 가장 대표적인 대입 연산자를 사용한 방법으로는 두 가지가 있다. 배열 요소에 하나씩 대입해가며 마지막에 널 문자까지 넣어주는 방법과 배열 선언과 동시에 바로 큰 따옴표를 이용해 문자열을 초기화하는 것이다. 하지만 여기서 유의할 점이 있다. C언어를 조금 공부해봤다면 다들 아시겠지만 문자열은 C언어 컴파일 과정에서 주소값을 반환한다. 그런데 배열 선언 동시에 초기화하는 것은 주소를 배열에 넣는 것이 아니라 각각 배열의 요소가 초기화되고 마지막에 널 문자까지 붙여준다. 결국 사진의 주석처럼 선언을 이미 한 이후 대입을 시도할 시 문자열의 첫 번째 문자의 주소(문자열이 임시로 저장되어 있는 배열의 첫 번째 요소의 주소)를 char형에 넣어버리는 것이고, str1[80]은 사실 상 str1 배열의 81 번째 요소를 가리키는 것이므로 이곳엔 쓰레기 값만이 기다리고 있을 뿐이다.
주석을 없애고 실행하면 이런 경고문이 뜬다.

즉 형변환 등의 작업 없이 주소를 char 형(정수)에 넣으려 하니 오류가 날 수 밖에 없다.
'C언어' 카테고리의 다른 글
[혼공C] 13-1 변수의 영역과 데이터 공유 (0) | 2021.10.09 |
---|---|
[혼공C] string.h 헤더파일 내장 함수 구현(strlen, strncpy, strncat, strcpy) (0) | 2021.10.09 |
[혼공C] 12-1 gets 함수를 사용한 문자열 입력(puts, fgets, fputs) (0) | 2021.10.07 |
[혼공C] 12-1 scanf 함수를 사용한 문자열 입력 (0) | 2021.10.07 |
[혼공C] 12-1 문자열의 주소로 접근하여 문자열을 변경하는 것은 가능한가? (0) | 2021.10.07 |

배열의 문자열 초기화는 여러 가지 방법이 있는데 가장 대표적인 대입 연산자를 사용한 방법으로는 두 가지가 있다. 배열 요소에 하나씩 대입해가며 마지막에 널 문자까지 넣어주는 방법과 배열 선언과 동시에 바로 큰 따옴표를 이용해 문자열을 초기화하는 것이다. 하지만 여기서 유의할 점이 있다. C언어를 조금 공부해봤다면 다들 아시겠지만 문자열은 C언어 컴파일 과정에서 주소값을 반환한다. 그런데 배열 선언 동시에 초기화하는 것은 주소를 배열에 넣는 것이 아니라 각각 배열의 요소가 초기화되고 마지막에 널 문자까지 붙여준다. 결국 사진의 주석처럼 선언을 이미 한 이후 대입을 시도할 시 문자열의 첫 번째 문자의 주소(문자열이 임시로 저장되어 있는 배열의 첫 번째 요소의 주소)를 char형에 넣어버리는 것이고, str1[80]은 사실 상 str1 배열의 81 번째 요소를 가리키는 것이므로 이곳엔 쓰레기 값만이 기다리고 있을 뿐이다.
주석을 없애고 실행하면 이런 경고문이 뜬다.

즉 형변환 등의 작업 없이 주소를 char 형(정수)에 넣으려 하니 오류가 날 수 밖에 없다.
'C언어' 카테고리의 다른 글
[혼공C] 13-1 변수의 영역과 데이터 공유 (0) | 2021.10.09 |
---|---|
[혼공C] string.h 헤더파일 내장 함수 구현(strlen, strncpy, strncat, strcpy) (0) | 2021.10.09 |
[혼공C] 12-1 gets 함수를 사용한 문자열 입력(puts, fgets, fputs) (0) | 2021.10.07 |
[혼공C] 12-1 scanf 함수를 사용한 문자열 입력 (0) | 2021.10.07 |
[혼공C] 12-1 문자열의 주소로 접근하여 문자열을 변경하는 것은 가능한가? (0) | 2021.10.07 |