인프런 커뮤니티 질문&답변

최재민님의 프로필 이미지
최재민

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

함수와 재귀함수 (v2)

함수와 재귀함수(v2) | 22:40 | 포인터 질문

해결된 질문

작성

·

98

1

다른 분 질문의 답변을 봐도 이해가 잘 안되서 질문 남깁니다!

앞 포인터 강의에서

int *p = &n;

printf("%d\n", p);

를 실행하면 n의 주소값이 출력된다고 이해했는데,

char *str;

printf("%s\n", str);

을 했을때는 왜 myString의 0번째 인덱스 주소값이 출력되는게 아니라 this is string 이 출력되는지 이해가 안되서요..
설명해주시면 감사하겠습니다!

답변 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언어에서 포인터와 문자열의 관계에 대한 것으로, 아마도 헷갈리실 수 있는 부분이 바로 포인터와 포인터가 가리키는 데이터의 차이일 겁니다.

  1. 포인터와 주소값 출력:

    • int *p = &n;에서 printf("%d\n", p);를 실행하면 pn의 메모리 주소를 가리키고 있으므로 주소값이 출력됩니다. 그러나 %d로는 포인터의 주소값이 아닌 정수형 값을 출력하려고 하기 때문에 경고 또는 잘못된 출력이 나올 수도 있습니다. 주소를 제대로 출력하려면 %p 포맷을 사용해야 합니다.
  2. 문자열 출력:

    • char *str;와 같이 문자열을 출력할 때 printf("%s\n", str);을 사용하면 문자열(str)이 null 종료 문자('\0')를 만날 때까지 그 내용을 출력합니다. str이 문자열을 가리키고 있을 때 %s는 그 주소에서 시작하는 문자들을 차례로 출력합니다. 이는 본래 C언어의 문자열은 문자 배열의 첫 번째 주소를 가리키며, 끝은 '\0'으로 표시되기 때문입니다.

추가적으로, 포인터가 배열의 첫 번째 요소의 주소를 가리키고 있을 경우, %s는 이 주소를 문자열의 시작으로 간주하고, 해당 위치부터 '\0'까지 문자열로서 출력하게 됩니다.

이와 관련된 내용에 대한 더 자세한 설명은 아래 질문을 참고해 보시길 추천드립니다:
- 함수와 재귀함수_포인터를 입력값으로 받는 함수 : 이 게시물에서는 문자열을 출력할 때와 포인터를 사용한 예의 차이에 대해 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

최재민님의 프로필 이미지
최재민

작성한 질문수

질문하기