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'값이 변하는 이유를 알 수가 없어서 질문을 드립니다.