네 2009 쓰고있어요
설명 감사드립니다. 저런 방법도 있었군요 TEncoding 이건 몰랐어요 ㅎㅎ
장성호 님이 쓰신 글 :
: 사용하시는 개발툴이 RAD2009이상의 최신버젼인가 보네요
:
: 유니코드 기반인듯 합니다.
:
:
[유니코드 문자열 메모리 복사]
: 유니코드이면 문자 하나에 길이가 1Byte가 아닐수 있습니다.
:
: String의 Length는 문자 갯수가 나올뿐이니, 실제 몇Byte를 가르치지는 않습니다.
:
: AnsiString일때는 Length와 메모리크기와 똑같구요
:
: 다음과 같이 복사하시면 될듯합니다.
:
:
: String sText=Memo1->Lines->Text;
: TEncoding* Encoding= TEncoding::Default;
: TBytes Buffer=Encoding->GetBytes(sText);
: memcpy(a.aText ,&Buffer[0],Buffer.Length);
:
:
:
:
기타 주의 사항
:
: 주의1 .
: Memo1->Lines->Text 는 Property입니다.
: Memo1->Lines->Text.c_str() 하면
: 원래 있던 메모리 주소를 return하는것이 아니라
: 새로 String을 할당해서 메모리를 return합니다.
:
:
: memcpy(a.aText, Memo1->Text.c_str(), Memo1->Text.Length() * sizeof(Memo1->Text[1]);
:
: 위와 같은 코드를 쓰시면
: Text에 3회 접근하기 때문에
: 세번이나 String메모리 할당 해제가 됩니다.
: 그리고 세번의 Text의 주소가 모두 다르구요
:
: 그러니
: 위에 제 코드처럼
: String변수에 받아서 쓰는것이 바람직합니다.
:
: 주의2.
: Memo1->Lines->Text 의 길이(메모리 크기가 ) 100Byte넘어가면
: 어떻게 되죠?
: 이부분은 memcpy하기 전에
: 크기 체크를 해야할듯 하네요
:
:
: 그럼..
:
: 축구 님이 쓰신 글 :
: : 음 텍스트 1번째 크기를 곱해주니 잘찍히네요. 왜곱해주는지는 생각좀 해봐야 할것 같군요.
: :
: : 감사합니다.
: :
: :
: : Lyn 님이 쓰신 글 :
: : : memcpy(a.aText, Memo1->Text.c_str(), Memo1->Text.Length() * sizeof(Memo1->Text[1]);
: : : 축구 님이 쓰신 글 :
: : : : 으흠 해봤는데 그대로 글이 뒤에가 짤려서 복사가 되네요 ㅠㅠ
: : : : 메모장 내용이 문제가 있는건가요 메모장에
: : : : /*
: : : : 이건 테스트용 입니다.
: : : :
: : : : ...........................vasdv..........
: : : : */
: : : :
: : : : 이렇게 되있거든요.
: : : :
: : : : 근데 출력은
: : : : /*
: : : : 이건 테스트용입니다.
: : : :
: : : : ......................//...vasdv.........
: : : : //표시 뒤는 짤리는 부분
: : : : */
: : : :
: : : : 여기까지 밖에 안되요 혹시 .............에 문제가 있는건가요?
: : : :
: : : :
: : : :
: : : : 김태선 님이 쓰신 글 :
: : : : : memcpy(a.aText, Memo1->Text.c_str(), Memo1->Text.Length());
: : : : :
: : : : : 축구 님이 쓰신 글 :
: : : : : : struct aaa
: : : : : : {
: : : : : : char aText[100];
: : : : : :
: : : : : : aaa()
: : : : : : {
: : : : : : memset(this, 0, sizeof(aaa));
: : : : : : }
: : : : : : };
: : : : : :
: : : : : : 이렇게 구조체를 만들고
: : : : : : aaa a;
: : : : : :
: : : : : : memcpy(&a.aText, Memo1->Text.c_str(), Memo1->Text.Length());
: : : : : :
: : : : : : 이렇게 복사해서 출력을 하니까 뒤 몇글자를 짤라먹더라고요.
: : : : : :
: : : : : : 브레이크 포인트 찍어서 봤는데 Memo1->Text에 값은 잘들어가있고 복사된 a.aText 를 보니까 한글은 깨져서 받고 나머지 뒷부분은 다 못받아 온걸 확인했습니다.
: : : : : : 한글이 깨져서 받아졌는데 출력은 정상으로 됐고요 못받아온 뒷부분은 출력이 짤리더라고요
: : : : : : 뭔가 틀린게 있나요? 복사는 되는데 전부 복사하질 않네요