동적할당 문자열의 출력 방식

조회수 525회

이미지

사진 처럼 동적 할당으로 문자열을 입력받고 그 문자열의 인데스 5번부터 끝까지를 출력하고싶습니다.. 여기서 문제가 뭘까요 ㅠㅠ

마지막 printf 부분에서 word[5]가 아니라 &word[5]라는걸 알아냈습니다. 왜 그런지 설명해주세요..

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • char * 타입 변수를 인덱스([])로 접근하면 해당 위치의 char 값이 반환되어 문자열(char *)이 아닌 문자(char)가 됩니다. %s 포맷은 문자열을 받기 때문에 출력이 제대로 이뤄지지 않는 것이고요.

    변수 word가 할당된 메모리 주소의 첫 번째 위치를 가르키고 있으니, 다섯 번째 문자부터 출력을 하고 싶다면, word + 5와 같이 포인터의 위치를 조정해 사용하시면 됩니다.

    &는 해당 변수의 주소를 가져오는 연산자로, word[5]&를 사용하면 해당 위치의 주소가 반환되어 결국 word + 5와 같은 의미가 됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • printf 함수에서 %d, %f 같은 것을 출력할 때에는 직접 값을 적거나 변수를 넣어줄 수 있는데,

    유독 %s는 다른 것과 다르게 문자열의 시작 주소를 적어줘야 합니다. 윗분 말씀대로 word[5]는 6번째 문자의 값이고, &word[5]는 6번째 문자가 저장된 주소입니다. %s에 &word[5]를 넣어주면 6번째 칸부터 그 뒤로 쭉~ 널문자를 만날때까지의 문자열이 출력됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)