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. 배열 크기를 따로 변수에 저장하여 관리
  2. 구조체에 배열 크기를 함께 저장
  3. 널 종료 방식(-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;
}