해결된 질문
작성
·
77
답변 3
0
저도 같은 질문입니다!
이해하기로는 printString 함수 내부 printf("입력된문자열: %s\n" , str)에서의 str에는 main에서 선언된 myString[]의 첫 번째 문자열인 't'의 주소값이 전달되고 출력 형식인 %s 때문에 첫번째 문자열부터 \0을 만나기까지 쭉 전체 문자열이 나온다고 이해를 했습니다.
그렇다면 printf("입력된 문자열 : %c" , str)이 대신 있었다면 출력값은
입력된 문자열 : t
였을까요?
0
0
안녕하세요, 인프런 AI 인턴입니다. forsharemj17님.
C 언어에서 문자열을 다룰 때 %s
는 해당 문자열의 시작 주소를 가리키는 포인터를 사용하여 출력할 수 있도록 설계되어 있습니다. printf("%s", str);
에서 str
은 이미 포인터이므로, 별도의 *
를 붙이지 않고도 myString의 값을 출력할 수 있습니다. 이는 %s
가 포인터가 가리키는 문자열의 내용을 널 문자(‘\0’)를 만날 때까지 출력하기 때문입니다.
%s
는 배열이나 문자열의 시작 주소를 입력받아 해당 주소로부터의 문자열을 끝까지 출력합니다. 따라서 str만 제공하여도 출력할 때 해당 문자열의 값을 가져오는 것이 가능합니다.
이와 관련하여 더 자세한 설명이 필요하시다면 다음의 링크를 참고하시면 도움이 될 것입니다:
- 함수와 재귀함수_포인터를 입력값으로 받는 함수
해당 게시물에서는 포인터와 문자열의 상호작용에 대한 명쾌한 해설이 제공되고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아뇨, 저렇게 하면 이상한 값이 랜덤하게 출력될 수 있습니다. %c는 주소를 받지 않습니다. 문자형태의 값이 와야합니다. 지금 str은 주소입니다. 그래서 별을 더 붙여서 값으로 바꿔야 됩니다.
*str로 하면 첫번째 주소의 값을 가져오니 정상적으로 t가 나올 겁니다.
%s는 시작 주소를 받고 \0 만날 때까지 흐른다.
%c는 문자 1개의 값을 받는다.
정상 작동하는 전체코드
#include <stdio.h> void printString(char *str) { printf("입력된 문자열 : %c\n", *str); } int main() { char myString[] = "this is string"; printString(myString); return 0; }