[C언어]배열(array)의 요소 개수 구하기(sizeof, strlen)

2024년 03월 20일 by 진아사랑해

    [C언어]배열(array)의 요소 개수 구하기(sizeof, strlen) 목차
반응형

프로그램에서 배열의 초기값이 정의되는 경우

크기를 지정하지 않은 포인터 배열을 선언한 후 그 배열 내에 몇 개의 요소(element)가 들어있는지 계산하는

방법은 sizeof()를 사용할 수 있습니다.

sizeof()는 컴파일하는 동안에 계산이 됨으로 프로그램이 돌아가는 동안에는 정확한 값을 가질 수 없습니다.

char *mode[]= {
    "a",
    "bb",
    "ccc",
    "ddd",
    "eeeee",
};

위처럼 프로그램에서 배열 초기화 값이 들어가 있는 경우입니다.

 

#define ARRAY_SIZE(x) (int)(sizeof(x)/sizeof(x[0]))

printf("mode[0] 크기 %ld\n",  sizeof(mode[0]));         
printf("mode 크기 %ld\n",  sizeof(mode));     
 printf("mode 요소(element) 개수 %d\n",  ARRAY_SIZE(mode)); 

결과는

mode[0] 크기 8 <- PC에서 수행하여 주소가 8 bytes(64 bits)를 사용합니다.
mode 크기 56 <- 전체 할당된 주소가 56 bytes입니다.
mode 요소(element) 개수 7 <- 56 / 8 = 7

이렇게 계산이 됩니다.

프로그램이 돌고 있는 중에 배열에 값이 추가되는 경우

char * supported [] = {};

supported[0] = "a";   <- 프로그램이 수행되면서 배열에 데이터 저장
supported[1] = "bb";
supported[2] = "ccc";
supported[3] = "dddd";
supported[4] = "";    
printf("supported[0] 크기 %ld\n",  sizeof(supported[0]));         
 printf("supported 크기 %ld\n",  sizeof(supported));     
printf("supported 요소(element) 개수 %d\n",  ARRAY_SIZE(supported)); 

결과는

supported[0] 크기 8  <- 최초 주소 8 bytes
supported 크기 0
supported 요소(element) 개수 0

원하는 결과가 나오지 않습니다.

 

저 같은 경우는 이렇게 하였습니다.

더 좋은 방법이 있으면 댓글을 부탁드립니다.

char * supported [] = {};

supported[0] = "a";   <- 프로그램이 수행되면서 배열에 데이터 저장
supported[1] = "bb";
supported[2] = "ccc";
supported[3] = "dddd";
supported[4] = ""; <- 저장된 요소의 마지막을 표현하기 위해 사용  

for(uint8_t i = 0; i < 10 ;i++){
    printf("%d번 크기 %ld\n", i, strlen(supported[i]));   
    if(strlen(supported[i]) == 0) break; 
}

실행결과는

0번 크기 1, a
1번 크기 2, bb
2번 크기 3, ccc
3번 크기 4, dddd
4번 크기 0

즉, 배열 요소의 개수는 4입니다.

반응형