C에서 Char 배열 초기화
![C에서 Char 배열 초기화](/img/C/feature-image---initialize-char-array-in-c.webp)
이 기사는 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, .,
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