해결된 질문
작성
·
98
·
수정됨
0
안녕하세요 선생님, 강의 감사히 잘 듣고 있습니다.
아래 코드에 대해 거의 동일한 내용의 다른 질문에 남겨주신 답변을 봤는데요 (컴파일러마다 값이 다를 수 있고, null 문자를 만날 때까지 계속 찾는다.)
강의에서는 "strlen()은 길이가 같으나, sizeof()하면 크기가 달라짐"
(sizeof()는 null문자가 있고, 없고 차이로 이해함)
질문)
그런데 strlen()은 길이가 같을 것으로 기대를 했는데 11과 5으로 차이가 좀 나더라구요...
이런 경우는 strlen()이 컴파일러에 의해 다른 값이 나오는 건지, null문자를 한참 못찾아서 11까지 간걸까요?
강의에서는 strlen()이 길이가 같다고 얘기해서 좀 혼란?스러운 것 같습니다.
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char str1[5] = {'H', 'e', 'l', 'l', 'o'};
char str2[] = "Hello";
printf("문자 배열의 sizeof() : %d\n", sizeof(str1)); // 5
printf("문자 배열의 strlen() : %d\n", strlen(str1)); // 11
printf("문자열의 sizeof() : %d\n", sizeof(str2)); // 6
printf("문자열의 strlen() : %d\n", strlen(str2)); // 5
return 0;
}
1주일 남은 시점이라 고생 엄청 많으실 것 같습니다. 화이팅!
답변 2
0
https://www.programiz.com/c-programming/online-compiler/
다시 해보시면 11 안나옵니다.
\0로 막혀있지 않은 문자 배열을 출력하는 것은 의미없습니다. 실제로 시험에 나오지도 않고요.
메모리 상태에 따라 다르게 출력될 수 있어서, 정상적인 코드가 아니라고 생각하시면 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. 포동봉봉님.
strlen()
과 sizeof()
에 대한 질문을 주셨네요. 이 부분은 문자열 처리에서 다소 헷갈릴 수 있는 주제입니다. 조금 더 자세히 설명해 드릴게요.
strlen()
과 sizeof()
의 차이strlen()
함수: 문자열에서 첫 번째 null 문자('\0'
)가 나타날 때까지의 문자 개수를 반환합니다. 때문에, 만약 null 문자가 없다면, 메모리 상의 다른 곳에서 null 문자를 찾게 되어 예기치 않은 큰 값이 반환될 수 있습니다. 따라서 str1
과 같이 null 종료 문자가 없는 배열에서 strlen()
을 호출하면 예상치 못한 값이 나올 수 있습니다.
sizeof
연산자: 변수나 타입 전체의 크기를 바이트 단위로 반환합니다. 배열의 경우, 전체 배열의 크기를 반환하므로 str1
은 배열 전체의 크기인 5를 반환합니다. str2
는 null 문자가 자동으로 포함되어 6을 반환합니다.
char str1[5] = {'H', 'e', 'l', 'l', 'o'};
: null 종료 문자가 없어 strlen(str1)
를 호출하면 예기치 않은 값을 반환할 수 있습니다. 현재 설정된 메모리에서 null 문자를 찾게 되는데, 이 과정에서 예상하지 못한 값이 11로 나올 수 있는 것입니다.
char str2[] = "Hello";
: 이 경우, 컴파일러가 자동으로 null 종료 문자를 추가합니다. 따라서 strlen(str2)
는 5를 반환하고, sizeof(str2)
는 null 문자까지 포함하여 6을 반환합니다.
strlen
과 sizeof
의 차이에 대한 보다 깊은 설명을 확인할 수 있습니다.포동봉봉님의 궁금증이 해결되었길 바랍니다. 추가적으로 궁금하신 점이 있다면 언제든 이어서 질문해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.