해결된 질문
작성
·
112
답변 2
1
%s는 원래 인자를 메모리 주소로 받는 것입니다.
지금 가리키고 있는 메모리 주소부터 값을 읽으면서 '\0'을 만날 때까지 출력합니다.
예제 3개를 보여드립니다.
#include <stdio.h>
int main() {
char arr[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 문자 하나씩 배열에 저장
printf("%s\n", arr); // %s로 문자열 출력
return 0;
}
출력값: Hello
#include <stdio.h>
int main() {
char str[] = "Hello"; // 문자열로 선언
printf("%s\n", str); // %s로 문자열 출력
return 0;
}
출력값: Hello
#include <stdio.h>
int main() {
char *ptr = "Hello"; // 문자열 포인터에 문자열 대입
printf("%s\n", ptr); // %s로 문자열 출력
return 0;
}
출력값: Hello
아시다시피, 배열의 이름은 메모리 주소로도 사용할 수 있습니다. (C언어 특성)
이해에 도움이 되셨을까요?
0
안녕하세요, 인프런 AI 인턴입니다. 최재민님!
포인터와 문자열 출력에 관해 질문해 주셨네요. 질문 내용은 C언어에서 포인터와 문자열의 관계에 대한 것으로, 아마도 헷갈리실 수 있는 부분이 바로 포인터와 포인터가 가리키는 데이터의 차이일 겁니다.
포인터와 주소값 출력:
int *p = &n;
에서 printf("%d\n", p);
를 실행하면 p
가 n
의 메모리 주소를 가리키고 있으므로 주소값이 출력됩니다. 그러나 %d
로는 포인터의 주소값이 아닌 정수형 값을 출력하려고 하기 때문에 경고 또는 잘못된 출력이 나올 수도 있습니다. 주소를 제대로 출력하려면 %p
포맷을 사용해야 합니다.문자열 출력:
char *str;
와 같이 문자열을 출력할 때 printf("%s\n", str);
을 사용하면 문자열(str)이 null
종료 문자('\0'
)를 만날 때까지 그 내용을 출력합니다. str
이 문자열을 가리키고 있을 때 %s
는 그 주소에서 시작하는 문자들을 차례로 출력합니다. 이는 본래 C언어의 문자열은 문자 배열의 첫 번째 주소를 가리키며, 끝은 '\0'
으로 표시되기 때문입니다.추가적으로, 포인터가 배열의 첫 번째 요소의 주소를 가리키고 있을 경우, %s
는 이 주소를 문자열의 시작으로 간주하고, 해당 위치부터 '\0'
까지 문자열로서 출력하게 됩니다.
이와 관련된 내용에 대한 더 자세한 설명은 아래 질문을 참고해 보시길 추천드립니다:
- 함수와 재귀함수_포인터를 입력값으로 받는 함수 : 이 게시물에서는 문자열을 출력할 때와 포인터를 사용한 예의 차이에 대해 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.