CString ->char 배열로 변환
CString str = _T("test");
CStringA strA = CStringA(str);
int len = str.Getlength();
char cArray[ len ] = {0x00, };
memcpy(cArray, strA.GetBuffer(), strA.GetLength());
--------------------------
CString => const char*
CString strTest = _T("test");
const char* cTest;
cTest = (CStringA)strTest;
---------------------------
const char* -> CString
const char* cTest = "test";
CString strTest;
strTest = (CString)cTest;
CString str = _T("test");
CStringA strA = CStringA(str);
char cArray[80] = { 0x00, };
memcpy(cArray, strA.GetBuffer(), strA.GetLength());
str = (CString)cArray;
GetDlgItem(IDC_ST_LOG)->SetWindowTextW(str);
str = (CString)cArray[0];
AfxMessageBox(str);
문자열 길이에 대한 정보
#include<string.h>
#include<stdio.h>
int main(void)
{
char src[] = "BlockDMask";
char dest1[] = "abcdefghijklmnop";
char dest2[] = "abcdefghijklmnop";// 메모리 복사1 : src 길이만큼만 복사
memcpy(dest1, src, sizeof(char) * 10); // 메모리 복사2 : src 길이 + 1 만큼 복사
memcpy(dest2, src, sizeof(char) * 10 + 1); // source
printf("src : %s\n", src); // destination
printf("dest1 : %s\n", dest1);
printf("dest2 : %s\n", dest2);
return 0;
}
결과를 보면 알 수 있듯이 C언어 스타일의 문자열(char*)을 전체 복사할때는 길이 + 1을 해주어야 합니다.
이미 다들 알고 있듯
const char* src = "BlockDMask"; 이것은 문자열의 끝에 문자열의 끝을 알리는 '\0'이 있기 때문에 이것까지 복사를 해주어야 딱 src 만큼 복사가 가능합니다.
그렇기 때문에 dest1는 "BlockDMask"까지만 복사 되어서 dest1이 "BlockDMaskklmnop" 가 되었고
dest2는 "BlockDMask\0" 까지 복사 되었기 때문에 "BlockDMask\0klmnop"가 되어서 출력할때는 앞에서부터 쭉 출력하다가 문자열의 끝을 알리는 '\0'를 만났기 때문에 "BlockDMask" 여기까지만 출력하게 된 것 입니다.
추가적으로 dest1과 dest2를 제대로 적으면
dest1 : "BlockDMaskklmnop\0"
dest2 : "BlockDMask\0klmnop\0"
이렇게 되겟죠?
프로그래머가 의도적으로 '\0'을 빼고 복사하려면 "sizeof(char) * 배열길이" 만큼만 복사하면 되고
'\0' 까지 복사를 하려면 "sizeof(char) * 배열길이 + 1" 까지 해주어야 합니다.
[C언어/C++] memcpy 메모리 복사 함수 설명 및 예시
안녕하세요. BlockDMask 입니다. 오늘은 C언어, C++에서 메모리를 복사하는 함수 memcpy 함수에 대해서 한번 알아보려 합니다. 지난시간에는 메모리를 초기화 하는 memset에 대해서 배웠던거 기억하시
blockdmask.tistory.com
end.
'잡학다식 > 코딩 공부' 카테고리의 다른 글
[C#,C++] region 사용법 & 단축키/소스코드 정리 (0) | 2022.11.01 |
---|---|
아스키코드(ASCII)표 (0) | 2022.10.27 |
[MFC] 체크박스 값 확인 등 유용한 함수,이벤트 (0) | 2022.10.25 |
[MFC] CString -> int 변환, Format 형식, 형 변환 (0) | 2022.10.25 |
[C#] region 사용/단축키 (0) | 2022.10.13 |