빠르고 친절한 답변 감사합니다!!
덕분에 해결됬습니다.
장성호 님이 쓰신 글 :
: strcpy에서 발생하네요
: 원인은 저도 잘 모르겠습니다.
: AnsiString변수 a의 바로앞이 int l 인데..
: strcpy안에서 침범하는것 같네요
: (CBuilder2010에서 CC32100MT.DLL에 구현된 CRT함수)
: 변수 l 과 a 사이에 dummy 1Byte이상 변수 하나 추가하면
: 문제는 사라집니다.(아래코드 처럼 , CBuilder버그인가?)
:
:
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
: int i, l = Memo1->Text.Length();
: int dummy;// 이렇게 더미변수를 끼워 넣으면 문제 사라짐
: AnsiString t,a;
: char b[1];
: t = Memo1->Text;
:
: for(int i=1; i<=l; i++)
: {
: a = t.SubString(1,1);
: strcpy(b,a.c_str());
: // Memo2->Lines->Add(int(b));
: Memo2->Lines->Add(int(b[0])); //다음과 같이 해야 ASCII가 제대로 들어감
: t.Delete(1,1);
: // l = Memo1->Text.Length();
: }
: }
:
:
: 그런데 말씀하신 ASCII로 바꾸려면 위와같이 수정해야 할것 같습니다.
:
: //=============================================
: 조금더 효율적인 코드로 바꾸려면..
: 다음과 같은 식으로 하면 될듯합니다.
:
: void __fastcall TForm8::Button2Click(TObject *Sender)
: {
: AnsiString t = Memo1->Text;
: char *p=t.c_str();
: while(*p)
: {
: Memo2->Lines->Add(int(*p++));
: }
: }
:
:
: 그럼..
:
:
: 정종범 님이 쓰신 글 :
: :
: : void __fastcall TForm1::Button2Click(TObject *Sender)
: : {
: : int i, l = Memo1->Text.Length(); //Memo1은 입력받은 문자
: : AnsiString t,a;
: : char b[1];
: : t = Memo1->Text;
: :
: : for(int i=1; i<=l; i++) //한 개씩 변환하기 위해 for문을 사용
: : {
: : a = t.SubString(1,1);
: : strcpy(b,a.c_str());
: : Memo2->Lines->Add(int(b)); //Memo2는 ASCII 코드값을 나타내는 곳
: : t.Delete(1,1);
: : // l = Memo1->Text.Length();
: : }
: : }
: :
: : 배열의 문자열을 ASCII 코드값으로 변경하는 소스인데요. (사실 좀 비효율적인거 같지만,,,)
: : For문을 한번 돌고 나오면 (for문)조건부분의 변수 'l'의 값이 바뀌네요.
: : 그래서 주석처리한 부분을 넣어줘야 제대로 실행이 되네요.
: : 근데 도저히 for문의 'l'값이 변하는 이유를 알 수가 없어서 질문을 드립니다.