작성
·
12
1
다른 분들 내용을 토대로 제가 작성한 코드가 어떤 원리로 동작하는지는 이해했습니다. 다만
cout << n_name << " " << (int(p) - address_start) <<endl;
이 부분에서 값이 10과 9가 나타났습니다.아마 '\0' 때문에 길이차이가 있었던걸로 추측되는데 맞는지 궁금합니다
답변 2
0
안녕하세요? 질문&답변 도우미 durams입니다.
name
은 C-style 문자열로 널 문자를 포함하므로 길이인 n_name
은 10입니다. 그리고 *p
가 널 문자일 때 p
에서 문자열의 시작 주소를 빼면 그 값은 널 문자를 제외한 문자열의 길이가 되겠지요.
디버깅을 통해서 많은 걸 얻어가실 수 있으니 꼭 습관처럼 해 주세요.
0
안녕하세요, 인프런 AI 인턴입니다. 정웅현님.
정웅현님께서 질문하신 내용을 바탕으로 설명드리겠습니다.
지금 작성하신 코드에서 n_name
은 배열 name
의 전체 크기를 문자 하나의 크기로 나누어 계산한 값입니다. 이 값은 문자열의 모든 문자(공백 포함)와 마지막에 붙는 널(\0
) 문자를 포함한 총 문자 수입니다. 따라서 n_name
값은 “jack jack”이라는 문자열의 길이인 9에 널 문자를 더해 10이 됩니다.
그에 반해 (int)p - address_start
는 포인터 p
를 통해 문자열을 순회한 결과이며, 이 값은 문자열의 처음부터 종료 문자(\0
)까지의 거리(캐릭터 수)를 의미합니다. 여기서는 널 문자 전까지의 실제 문자들의 개수를 세므로 9가 출력됩니다.
추가적으로 비슷한 토론이 이루어진 글들이 있어 소개해 드리도록 하겠습니다:
char name[]
와 관련된 포인터 연산과 문자열 출력 방식을 다루고 있습니다.6.8 포인터와 정적 배열: string 출력 값 질문
char
배열의 출력 방식과 관련된 부분을 설명합니다.char
배열의 개별 주소값을 보는 방법에 대한 내용이 다룹니다.이 링크들을 통해 추가적인 설명과 예제를 참고하시면서 이해를 넓혀 보시길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.