본문 바로가기

기초공부/C

[C]printf %c, %s 서식의 차이점

문제 풀다가 궁금증이 일어 %c와 %s와 관련하여 실험을 하였다. printf로 한 문자열을 출력하면 어떻게 출력될까.

결과는 다음과 같았다.


결과를 보고 기존의 지식과 연관지어 추론해보았다.

우선 %c를 서식으로 했을 때 문자열의 주소인 str을 출력했을 때랑 문자열의 내용인 *str을 출력했을 때를 비교해보자.
%c는 한 문자를 출력하므로 전자는 문자열 주소의 첫 글자인 0이 출력되었다고 추측했다. 실제로 서식문자를 %p로 하여 주소를 출력하면 첫 글자가 0으로 나온다.


후자는 한 문자를 출력하는데 대상이 문자열의 첫글자를 주소로 하는 문자이므로 h가 출력되는 것이 당연하다. 만약 *(str+1)을 출력한다면 e가 출력되었을 것이다.

%s를 서식으로 했을 때를 살펴보자.
%s는 대상(이 경우는 str 또는 *str)이 주소라고 가정한다. 대상이 가리키는 문자열의 내용을 출력하므로 3번째 printf의 경우에는 hello world가 출력된다.
4번째 대상은 주소가 아니라 문자열의 내용이다. %s는 문자열의 내용을 주소로 받아들이기 때문에 오류가 발생한다. 따라서 결과를 출력하지 않고 프로그램을 종료한다.

기존에 알고 있던 내용을 다시 한 번 정리해보았다.