동적할당 문자열의 출력 방식
조회수 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번째 칸부터 그 뒤로 쭉~ 널문자를 만날때까지의 문자열이 출력됩니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력