안녕하세요. 스마트 팩토리입니다.
c 언어[025] 문자열과 배열(2) strlen 문자열크기, 배열크기 에 대해 알아보겠습니다.
1. 문자열과 배열
가. 배열 크기 지정하지 않은 경우
char str[]="hello";
int arr[]={10,20,30};
문자열과 된 str 배열과 숫자를 원소 갖는 arr배열입니다.
str의 크기는 5가 나오고 arr은 3이 나와야합니다.
문자열 배열의 크기를 알아보기 위해서 sizeof 와 strlen 있습니다.
len = strlen(str);
배열의 크기가 지정되지 않은 상황에서 strlen은 바로 그 배열의 크기를 알려줍니다.
hello는 5가 나옵니다.
len2 = sizeof(str)/sizeof(char);
같은 사이즈만 str 길이가 6이 나온 것을 볼 수 있습니다 char 형의 경우 마지막에 \0 으로 null문자가 들어가게 되어서 나오는 현상입니다.
len2 = sizeof(str)/sizeof(char)-1;
sizeof 의 경우 마지막에 -1을 해줘야 글자만의 배열수가 나오게 됩니다.
len3 = sizeof(str);
sizeof(char)=1 이므로 sizeof(str)이 그대로 나오게 됩니다. 물론 마지막에 -1을 해야 정확한 값이 나오게 됩니다.
int arr[]={10,20,30};
숫자로 된 경우 배열 크기는 3이 나와야 합니다.
printf("arr[]길이 : %d\n", sizeof(arr));
sizeof(int) =4 로 나누어 주면 12/4에 의해서 3이 나오게 됩니다.
#include<stdio.h>
#include<string.h>
int main() {
char str[]="hello";
int arr[]={10,20,30};
int len, len2,len3;
len = strlen(str);
len2 = sizeof(str)/sizeof(char);
len3 = sizeof(str);
printf("str길이 : %d\n", len);
printf("str길이 : %d\n", len2);
printf("str길이 : %d\n", len3);
printf("arr[]길이 : %d\n", sizeof(arr));
}
printf("arr[]길이 : %d\n", sizeof(arr));
printf("arr[]길이 : %d\n", sizeof(arr)/sizeof(int));
뒷부분에 출력값이 제대로 나온 것을 알 수 있습니다.
나. 배열 크기 지정되어 있는 경우
char str[50]="hello";
문자열의 경우 배열 값이 지정되면 해당 배열 만큼의 공간을 확보합니다.
그래서 할당된 크기가 나오게 됩니다.
하지만 문자열의 경우 strlen은 실제 크기만큼만 나옵니다.
int arr[10]={10,20,30};
숫자 배열도 배열 크기가 정의 되면 지정된 크기만큼 나오게 됩니다.
#include<stdio.h>
#include<string.h>
int main() {
char str[50]="hello";
int arr[10]={10,20,30};
int len, len2;
len = strlen(str);
len2 = sizeof(str)/sizeof(char)-1;
printf("str길이 : %d\n", len);
printf("str길이 : %d\n", len2);
printf("arr[]길이 : %d\n", sizeof(arr)/sizeof(int));
}
'C 언어' 카테고리의 다른 글
c 언어[027] 배열(array)과 포인터( pointer) (0) | 2021.10.06 |
---|---|
c 언어[026] 문자열과 배열(3) strcpy:문자열 복사, strcat(문자열 추가), 문자열 초기화 (0) | 2021.10.05 |
c 언어[024] 문자열과 배열(1) 문자열 출력 char arr[100] = { 'H','e','l','l','o' }; char arr1[100] = "hello \n"; (0) | 2021.10.03 |
c 언어[023] 배열 원소값 입력하고 배열 원소중 최대값(Max), 최소값(Min) 출력 (0) | 2021.10.02 |
c 언어[022] 배열 숫자 입력하고 배열값 순차출력, 거꾸로 출력 (0) | 2021.10.01 |
댓글