sizeof 연산자는 컴파일 시간에 타입이나 객체의 크기를 바이트 단위로 결정하는 데 사용됩니다. 주로 메모리 할당, 구조체 및 배열의 크기 계산에 필요합니다.
예시:
int a; printf("%zu ", sizeof(a)); // int 형 변수 a의 크기 printf("%zu ", sizeof(int)); // int 형의 크기
특징:
sizeof는 size_t를 반환하며, 항상 >= 0입니다.sizeof(array)는 포인터의 크기가 아니라 전체 배열의 크기를 반환합니다.함정 예시:
void foo(int arr[]) { printf("%zu ", sizeof(arr)); // 배열이 아니라 포인터의 크기를 출력합니다! } int arr[10]; foo(arr); // sizeof(arr) == 40 (일반적으로), sizeof(arr의 foo 내 == 8 (일반적으로)
C 언어에서 표현식 sizeof('a')는 무엇을 반환합니까?
답변: 'a'가 char처럼 보이지만, 표현식 sizeof('a')의 결과는 int 타입의 크기와 같으며, 이는 문자 상수가 C에서 int이기 때문입니다.
예시:
sizeof('a') // 일반적으로 4, 아닌 1
이야기
malloc(strlen(str) * sizeof(char)), 널 문자에 대해 잊었습니다. 이는 마지막 바이트 손실 및 표준 라이브러리 문자열 처리 함수에서 버그를 유발했습니다.이야기
sizeof(arr)를 사용했지만, 포인터의 크기만 받았습니다. 그 결과 메모리에 너무 적은 데이터를 기록하게 되어 힙이 손상되었습니다.이야기
개발자가 한 글자의 메모리를 할당하기 위해 sizeof('a')를 사용하기로 결정했고, 1바이트를 예상했지만 4바이트(또는 8바이트)를 얻었습니다. 이는 비효율적인 메모리 소비와 예상 크기에 의존하는 코드 문제로 이어졌습니다.