일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- RootMotion
- UnrealEngine4
- 백준
- NRVO
- const
- DirectX11
- softeer
- Programmers
- directx
- Frustum
- DeferredRendering
- UnrealEngine5
- C++
- IFileDialog
- 2294
- Unreal Engine5
- 1563
- RVO
- 팰린드롬 만들기
- algorithm
- GeeksForGeeks
- C
- winapi
- UE5
- 티스토리챌린지
- 프로그래머스
- baekjoon
- 언리얼엔진5
- 오블완
- 줄 세우기
- Today
- Total
Game Develop
[C++] memcpy 사용해서 char배열 복사 본문
알다시피 문자열의 끝은 반드시 \0이 있어야한다.
그렇기 때문에 어떠한 문자열을 저장하는 char 배열을 선언할 경우, 반드시 문자의 개수보다 1개 더 크게 잡아야한다.
maxlevel 은 8글자이지만, 배열의 크기는 최소 9로 잡아줘야한다.
char cArray[9] = "maxlevel";
문자개수와 똑같은 크기인 8로 선언할 경우, 컴파일에러가 발생한다.
컴파일시점에서 반드시 문자열의 끝에는 \n이 있어야한다고 보장해줘야한다는 의미이다.
만약, maxlevel이라는 문자열의 앞 3글자 max를 low로 바꿔서 최종적으로 lowlevel이라는 문자열을 만드는게 목적이라면,
아래와 같이해야한다.
char a1[9] = "maxlevel";
char a2[] = "low";
memcpy(a1, a2, sizeof(char) * 3);
---> lowlevel 출력.
a2 메모리의 앞에서 3바이트만큼만 a1의 앞에서 3바이트랑 교체한것이다.
만약, 아래와 같은 코드라면?
char a1[9] = "maxlevel";
char a2[] = "low";
memcpy(a1, a2, sizeof(a2));
---> low 출력.
이건 왜 low만 출력하는걸까?
왜냐하면 sizeof(a2)는 결과값이 4이기 때문이다.
a2라는 변수의 메모리는 low만 있는 3바이트가 아니라 \0까지 포함한 4바이트이다.
즉, 위 memcpy함수를 수행할 경우 a1의 내용물은 아래와같이된다.
a1 == "l o w \0 e v e l \0"
3번째 인덱스에 \0이 있는걸 확인할 수 있다.
그리고 cout이라는 표준스트림출력객체는, \0을 만날때까지의 문자만 콘솔에 출력한다.
그렇기때문에 콘솔에는 low만 출력된다.
'C++ > C++' 카테고리의 다른 글
[C++] 프로세스 메모리 세그먼트들 (0) | 2022.11.19 |
---|---|
[C++] 문자열리터럴 (0) | 2022.11.19 |
[C++] erase()와 iterator (1) | 2022.11.15 |
[C++] Iterator (반복자) (0) | 2022.11.02 |
[C++] vector (0) | 2022.11.01 |