- [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입니다.
'STM32' 카테고리의 다른 글
온라인 컴파일러(Online Compiler) (0) | 2024.03.25 |
---|---|
Sublime Text 편집기에서 이전 커서 위치로 이동(Go Back) (0) | 2024.03.21 |
[TouchGFX]화면의 SlideBar 변경 값을 응용 프로그램에 전달 방법 (0) | 2024.01.25 |
[TouchGFX]A Screen을 복사하여 B Screen만들기 (0) | 2024.01.24 |
[ABOV]테이블 등 초기값을 갖는 특정 데이터를 Flash 영역에 저장 (0) | 2024.01.12 |