C에서 Char 배열 복사
이 기사는 C에서 char 배열을 복사하는 방법에 대한 여러 방법을 보여줍니다.
memcpy
함수를 사용하여 C에서 Char 배열 복사
char
배열은 아마도 C 코드에서 조작되는 가장 일반적인 데이터 구조이며 배열 내용을 복사하는 것은 핵심 작업 중 하나입니다. C 스타일 문자열은char
배열과 매우 유사합니다. 따라서 배열 내용 복사를 처리하는 여러 가지 방법이 있습니다. 다음 예제에서 우리는 두 개의 배열,arr
와arr2
를 선언했습니다. 전자는 문자 목록 표기법으로 초기화되고 후자는 문자열 리터럴로 초기화됩니다. 이것은 다른 배열 구조와 크기를 산출합니다. arr
객체는 메모리에 7 자이지만arr2
는 17 자에 널 바이트를 더한 결과 18 바이트 객체가됩니다. 결과적으로 배열의 길이를 나타내는 두 번째 인수로sizeof arr2-1
표현식의 값을 전달합니다. 반면에printf
함수와% s
형식 지정자를 사용하여arr2
배열의 내용을 인쇄 할 수 있습니다.
char
배열을 다른 위치에 복사 할 때 동일한 세부 사항을 고려해야합니다. memcpy
함수는<string.h>
헤더 파일에 정의 된 표준 라이브러리 문자열 유틸리티의 일부입니다. 세 개의 매개 변수가 필요하며 그 중 첫 번째는 배열의 내용이 복사되는 대상 포인터입니다. 두 번째 매개 변수는 소스 배열에 대한 포인터이고 마지막 매개 변수는 복사 할 바이트 수를 지정합니다. sizeof
연산자는char
배열 객체 크기를 바이트 단위로 반환합니다. 따라서sizeof arr
표현식 값을 전달하는malloc
호출로 동적 메모리를 할당합니다. 반환 된 메모리 영역은arr
내용을 보관하기에 충분하며 버퍼 오버플로 버그에 대해 걱정할 필요가 없습니다. 하지만malloc
에서 반환 된 포인터는 해제되어야합니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
int main(int argc, char *argv[]) {
char arr[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
char arr2[] = "array initialized";
printf("%lu\n", sizeof arr);
printf("%lu\n", sizeof arr2);
printCharArray(arr, sizeof arr);
printCharArray(arr2, sizeof arr2 - 1);
char *str = malloc(sizeof arr);
memcpy(str, arr, sizeof arr);
printf("str: ");
printCharArray(str, sizeof arr);
free(str);
str = malloc(sizeof arr2);
memcpy(str, arr2, sizeof arr2);
printf("str: %s\n", str);
free(str);
exit(EXIT_SUCCESS);
}
출력:
7
18
a, b, c, d, e, f, g,
a, r, r, a, y, , i, n, i, t, i, a, l, i, z, e, d,
str: a, b, c, d, e, f, g,
str: array initialized
memmove
함수를 사용하여 C에서 Char 배열 복사
memmove
는 표준 라이브러리 문자열 유틸리티의 또 다른 메모리 영역 복사 기능입니다. 대상 및 소스 메모리 영역이 겹치는 경우를 수용하기 위해보다 강력한 기능으로 구현되었습니다. memmove
매개 변수는memcpy
와 동일합니다.
arr2
내용을 복사 할 때 세 번째 매개 변수로sizeof arr2
표현식을 전달했습니다. 종료하는 널 바이트조차도 대상 포인터에 복사되었지만 결과적으로printCharArray
를 사용하는 대신% s
와 함께printf
를 호출하여 내용을 출력함으로써이 작업을 활용합니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
int main(int argc, char *argv[]) {
char arr[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
char arr2[] = "array initialized";
char *str = malloc(sizeof arr);
memmove(str, arr, sizeof arr);
printf("str: ");
printCharArray(str, sizeof arr);
free(str);
str = malloc(sizeof arr2);
memmove(str, arr2, sizeof arr2);
printf("str: %s\n", str);
free(str);
exit(EXIT_SUCCESS);
}
출력:
str: a, b, c, d, e, f, g,
str: array initialized
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