[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만 출력된다.