C에서 Char 배열 초기화

Jinku Hu 2023년10월12일
  1. 중괄호 {} 표기법을 사용하여 C에서char 배열 초기화
  2. 문자열 할당을 사용하여 C에서char 배열 초기화
  3. {{}}이중 중괄호를 사용하여 C에서 2D char 배열 초기화
C에서 Char 배열 초기화

이 기사는 C에서char 배열을 초기화하는 방법에 대한 여러 방법을 보여줍니다.

중괄호 {} 표기법을 사용하여 C에서char 배열 초기화

char 배열은 대부분 고정 크기 구조로 선언되며 종종 즉시 초기화됩니다. 중괄호 목록 표기법은 상수 값으로 char배열을 초기화하는 데 사용할 수있는 방법 중 하나입니다. 나머지 문자는 null 바이트 값으로 암시 적으로 초기화되므로 중괄호로 요소의 일부만 지정할 수 있습니다. char배열을 문자열로 인쇄해야하는 경우 유용 할 수 있습니다. 유효한 문자 끝에 저장되는 널 바이트 문자가 있으므로printf 함수를%s 형식 문자열 지정자와 함께 효율적으로 활용하여 배열의 내용을 출력 할 수 있습니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printCharArray(char *arr, size_t len) {
  printf("arr: ");
  for (int i = 0; i < len; ++i) {
    printf("%c, ", arr[i]);
  }
  printf("\n");
}

enum { LENGTH = 21, HEIGHT = 5 };

int main() {
  char c_arr[LENGTH] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
  printCharArray(c_arr, LENGTH);

  exit(EXIT_SUCCESS);
}

출력:

arr: a, b, c, d, e, f, g, , , , , , , , , , , , , , ,

문자열 할당을 사용하여 C에서char 배열 초기화

char 배열을 초기화하는 또 다른 유용한 방법은 선언문에 문자열 값을 할당하는 것입니다. 문자열 리터럴에는 배열 길이보다 적은 문자가 있어야합니다. 그렇지 않으면 문자열의 일부만 저장되고 버퍼 끝에 종료 널 문자가 없습니다. 따라서 사용자가%s 지정자를 사용하여 배열의 내용을 인쇄하려고하면 마지막 문자 다음에 메모리 영역에 액세스 할 수 있으며 오류가 발생할 수 있습니다.

c_arr의 길이는 21 자이며 20 개의 char긴 문자열로 초기화됩니다. 결과적으로 배열의 21 번째 문자는\0 바이트가 보장되어 내용이 유효한 문자열이됩니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printCharArray(char *arr, size_t len) {
  printf("arr: ");
  for (size_t i = 0; i < len; ++i) {
    printf("%c, ", arr[i]);
  }
  printf("\n");
}

enum { LENGTH = 21, HEIGHT = 5 };

int main() {
  char c_arr[LENGTH] = "array initialization";
  char c_arr2[LENGTH] = "array initialization.f";
  printCharArray(c_arr, LENGTH);
  printCharArray(c_arr2, LENGTH);
  printf("%s\n", c_arr);
  printf("%s\n", c_arr2);

  exit(EXIT_SUCCESS);
}

출력:

arr: a, r, r, a, y,  , i, n, i, t, i, a, l, i, z, a, t, i, o, n,  ,
arr: a, r, r, a, y,  , i, n, i, t, i, a, l, i, z, a, t, i, o, n, .,
array initialization
array initialization.//garbage values//

{{}}이중 중괄호를 사용하여 C에서 2D char 배열 초기화

중괄호 목록은 2 차원 char배열을 초기화하는 데에도 사용할 수 있습니다. 이 경우 5x5 char 배열을 선언하고 외부 중괄호 안에 5 개의 중괄호 문자열을 포함합니다. 이 예제의 각 문자열 리터럴은 행렬의 5 개 요소 행을 초기화합니다. 이 2 차원 배열의 내용은 각 행의 길이가 문자열 리터럴의 길이와 일치하기 때문에%s 지정자로 인쇄 할 수 없습니다. 따라서 초기화 중에 암시 적으로 저장된 종료 널 바이트가 없습니다. 일반적으로 컴파일러는 문자열 리터럴이 배열 행보다 큰 경우 경고합니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

enum { LENGTH = 5, HEIGHT = 5 };

int main() {
  char c_arr[HEIGHT][HEIGHT] = {
      {"hello"}, {"there"}, {"multi"}, {"dimen"}, {"sion."}};

  for (size_t i = 0; i < HEIGHT; ++i) {
    for (size_t j = 0; j < HEIGHT; ++j) {
      printf("%c, ", c_arr[i][j]);
    }
    printf("\n");
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

출력:

h, e, l, l, o,
t, h, e, r, e,
m, u, l, t, i,
d, i, m, e, n,
s, i, o, n, .,
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C Array