인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

이준우님의 프로필 이미지

작성한 질문수

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

포인터의 개념과 활용

문자열 포인터 출력(16:49)

해결된 질문

작성

·

59

0

포인터에 의한 문자열 출력 경우들을 몇가지 정리해봤는데 정확히 이해하고 있는 건지 모르겠습니다. 선생님 한번 봐주세요

#include <stdio.h>

int main() {

char *s="Hello world!";//포인트 변수 s 선언, 문자열 Hello world! 저장

printf("%s\n", s); // 포인트 변수 s호출, 문자열의 첫번째 주소를 가져온다. %s에 의해 '문자열'로 취급되서, 전체 출력한다.

//printf("%c\n", s);//이건 에러가 나는데 문자열을 문자로 출력하려고 해서?? 잘 모르겠습니다.

printf("%c\n", *s); // 포인트 변수 s호출, 문자열의 첫번째 주소가 갖는 값을 가져온다. %c에의해 '문자'로 취급되서, H를 출력한다.

printf("%c\n", *s+1); //포인트 변수 s호출, 문자열의 첫번째 주소가 갖는 값을 가져온다. 우선 H가 호출되고 1을 더한 I가 출력

printf("%c\n", *(s+1)); // 포인트 변수 s에 1이 더해진 문자열의 두번째 주소가 갖는 값을 가져온다. e를 출력한다.

return 0;

}

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

  1. \0을 만나기 전까지 모두 출력 - 정상적으로 출력됩니다.

  2. %c는 단일 문자를 출력해야하는데, 문자열의 주소(s)를 주고 있습니다. 그래서 정상적으로 출력되지 않습니다.

  3. *s를 줬다면 첫번째 문자 값을 주니까 H가 출력됩니다.

  4. *s'H'이고, 여기에 정수 1을 더하면 'H'의 ASCII 값(72)에 1을 더해 73이 되어 'I'가 됩니다.

  5. s+1은 문자열의 두 번째 문자 주소를 의미하며, *(s+1)은 그 주소에 저장된 문자를 가져옵니다. 두 번째 문자는 'e'입니다.

이렇게 해석하시면 됩니다.

 

그래서 전체 출력값

Hello world!

(안 나오거나 이상한 값)

H

I

e

 

이렇게 됩니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 이준우님.

질문하신 C 언어에서 포인터에 의한 문자열 출력 개념에 대해 설명해드리겠습니다. 코드 각 부분의 의미를 정리해볼게요.

  1. printf("%s\n", s);

    • 이 줄은 문자열을 %s 형식을 사용하여 출력합니다. 여기서 s는 문자열 “Hello world!“의 첫 번째 문자를 가리키는 포인터이므로, printf 함수는 문자열 전체를 출력합니다.
  2. printf("%c\n", s);

    • 이 줄에서는 %c 형식이 사용되었기 때문에 컴파일러가 s를 문자로 해석하려고 시도합니다. 하지만 s는 문자열의 시작 주소를 담고 있는 포인터이기 때문에, 정확히 말하면 주소가 출력되게 됩니다. 원래 의도대로라면 *s로 첫 번째 문자인 ‘H’를 출력해야 합니다.
  3. printf("%c\n", *s);

    • *s는 포인터 s가 가리키는 주소의 값을 가져오게 됩니다. 즉, 문자열 “Hello world!“의 첫 번째 문자 ‘H’ 값을 가져와 출력합니다.
  4. printf("%c\n", *s+1);

    • *s+1은 첫 번째 문자 ‘H’의 ASCII 값에 1을 더한 새로운 문자 ‘I’를 출력합니다.
  5. printf("%c\n", *(s+1));

    • 이 표현은 s 포인터를 한 칸(즉, 한 문자) 앞으로 이동시켜, 두 번째 문자 ‘e’의 값을 가져와 출력합니다.

이와 관련하여 더욱 이해를 도와줄 수 있는 기존 답변을 링크해드립니다:

위에 제공한 링크에서, 포인터와 문자열의 상호작용에 대해 더 깊이 이해할 수 있는 답변과 예제를 확인할 수 있습니다.

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