본문 바로가기

프로그래밍/C 기초

[C언어 강좌] #17 - 문자열과 배열

저번에 문자를 저장하는방법을 알아봤습니다.

근데 특별한 문장을 저장하고싶다면 엄청나게 많은 문자가 필요할겁니다.

Hello를 저장하고싶다면

char c1 = 'H'

char c2 = 'e'

char c3 = 'l'

char c4 = 'l'

char c5 = 'o'

이런식으로 Hello라는 단어 하나 저장하는데도 변수를 5개나 만들어야되죠.


근데 저번에 이런경우를 보지 않았습니까?

이런 문제는 배열을 통해 해결할수 있었죠.

char형의 배열을 만들어서 문자를 저장할수 있습니다


자 배열을 만들어보고 문자열을 출력해봅시다.

5글자니까 5개의 char변수를 담을수있는 배열을 만들어주면 되겠죠.

그리고 문자열의 출력은 %c가 아닌 %s로 해주시면 됩니다.


어라? 뒤에 이상한글자들이 붙었습니다.


그건 바로 NULL문자가 없기때문입니다. NULL은 비어있다는 뜻이였죠?

문자열에서는 끝을 알려주기위해서 NULL을 넣어줘야합니다. 널문자를 넣어주기위해서 배열의 크기도 6으로 늘려줘야되겠죠.

저번에 아스키코드 표를 보면 NULL문자가 나와있는데 '\0'을 해주시면 널문자가 들어갑니다.

만약 NULL문자를 넣어주지 않으면 NULL문자가 나올때까지 계속해서 문자를 출력해나갈것입니다.

그래서 저렇게 이상한 문자가 나오게된것이죠. 그러다가 우연히 NULL문자를 만나게되고 중단된겁니다.


이건 %s의 기능과 관련이 있는데 %c는 정수타입이 와야되지만 %s는 주소값이 와야합니다.

배열에 대해서 알아볼때 배열의 이름을 그대로 적으면 그건 첫번째 원소의 주소값을 가르키는것이라고 했었죠?

%s는 주소값을 가져오면 그 주소값부터 NULL이 나올떄까지 계속해서 읽어나갑니다.

그래서 %c와 달리 %s는 문자열을 출력할수 있는것이죠.



널문자를 넣어주면 정상적으로 Hello가 출력됩니다.


근데 매번 저렇게 입력하기는 귀찮겠죠.



그래서 그냥 이렇게 바로 입력해도 위에 입력한것과 같은 기능을 할수 있도록 되있습니다.

실제로 저렇게 넣어도 위에서 한것처럼 각 배열마다 문자가 들어가있습니다.

참고로 스페이스바나 개행문자, 숫자도 모두 여기서는 하나의 문자로 생각해주셔야합니다.

char c = '1';

char c = 1;

이 두개는 전혀 다른것입니다!



실제로 출력해봐도 전혀 다른결과가 나옵니다. '1'은 하나의 문자고 1은 정수입니다.