본문 바로가기

C

[C언어] 문자열과 배열

반응형

1. 문자(배)열의 크기는 저장될 문자열의 길이 +1을 해준다.

char str[10]; // "abcdefghi"

2. 배열의 크기인 10보다 작은 문자열로 초기화하면, 나머지 공간에는 NULL로 채워진다.

char str[10] = "abc"; // abc까지 저장되고 나머지 공간에는 NULL로 채워진다.

3. 선언한 배열의 크기보다 더 큰 문자열을 초기화하려고 시도하면 'compile error'가 발생한다. 즉 문자열을 할당받은 저장 공간의 크기만큼 저장되고, 나머지 문자열 자리에는 쓰레기 값이 출력된다.

char str[10] = "abcdefghijklmn"; // compile error

4. 배열을 초기화했을 경우, 배열의 크기는 따로 입력하지 않아도 된다.

char str[] = "abcdef"; // str[6]만큼의 공간이 할당된다.

5. 초기화 시, 문자열을 따로 입력하지 않으면 선언한 크기의 공간이 NULL로 초기화된다.

char str[10] = ""; // str은 NULL로 초기화된다.

6. 배열은 데이터가 저장된 공간의 시작 주소를 가리킨다.


#include<stdio.h>

int main(){

   char str1[10] = {'a', 'b', 'c'};
   char str2[10] = "abc";
   char str3[] = "abc";                  // 문자열 끝에 '\n'을 포함하여 4byte가 할당된다.
   char str4[10] = "very Long String";   // (오류) 선언된 크기보다 더 큰 저장공간이 필요하다.

   int size = sizeof(str1) / sizeof(str1[0]);   // str1[] 배열의 index 크기를 구한다.
   for(int i = 0; i < size; i++){               // str1[i]에 저장된 문자를 하나씩 출력한다.
      printf("%c", str1[i]);
   }

   printf("\nstr2 = %s\n", str2);   // str2에 저장된 문자열을 출력한다.
   printf("str3 = ");   printf(str3);
   printf("\nstr4 = %s\n", str4);   // str4[]에서 선언한 크기는 '10'이다.
                                    // str4[]에는 10만큼의 저장공간이 확보되어 10byte까지 해당되는 문자열만 str4[]에 저장된다.
                                    // 그 이상의 문자열자리에는 쓰레기 값이 출력된다.

   return 0;
}

 

반응형