C
[C언어] 리스트(배열)의 길이 구하기
hyeeein
2025. 2. 28. 01:19
1. 정적 배열의 길이 구하기 (sizeof 사용)
- sizeof(arr): 배열 전체 크기 (바이트 단위)
- sizeof(arr[0]): 배열의 한 원소 크기 (바이트 단위)
- 배열 길이 = 전체 크기 ÷ 한 원소 크기
🚨 주의: sizeof 방식은 포인터에는 적용되지 않는다.
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int length = sizeof(arr) / sizeof(arr[0]); // 전체 크기 ÷ 원소 하나 크기
printf("배열 길이: %d\n", length); // 출력: 5
return 0;
}
2. 문자열(널 종료 문자열)의 길이 구하기 (strlen 사용)
- strlen()은 널 문자(\0)를 포함하지 않는다.
- 즉, "Hello"의 길이는 5지만, 배열 크기(sizeof(str))는 6
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello";
int length = strlen(str);
printf("문자열 길이: %d\n", length); // 출력: 5
return 0;
}
하나 더, 문자열 합치기 strcat()
C언어는 + 연산자를 활용해서 문자열을 직접 연결(concatenate) 할 수 없음.
문자열을 합치려면, strcat()이나 sprintf(), snprintf() 등을 사용해야 함.
❌ [주의] 포인터로 받은 배열의 길이는 구할 수 없음
- 해결 방법
- 배열 크기를 따로 변수에 저장하여 관리
- 구조체에 배열 크기를 함께 저장
- 널 종료 방식(-1 같은 값 사용)으로 관리
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = (int*)malloc(5 * sizeof(int));
printf("sizeof(arr): %lu\n", sizeof(arr)); // 포인터 크기(보통 8바이트)
free(arr);
return 0;
}