C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[25406] [답변] 변환 오류 + 엑세스 에러....잡아서 올립니다.
정성훈.해미 [sage5nor] 970 읽음    2003-04-29 13:05
[완성 소스]--------------------------------------

// CR 이나 LF는 그냥 써도 됩니다...정의되어 있으니 따로 정의할 필요는 없습니다.
// 그래서 생략했슴.

   int Start, Stop;

   if(Memo1->Lines->Count==0) Memo1->Lines->Add("");
   Start = 1;
   Stop = Buffer.Pos(CR);

   if(Stop == 0) Stop = Buffer.Length() + 1;

   while(Start <= Buffer.Length())
   {
      Memo1->Lines->Strings[Memo1->Lines->Count -1] =
         Memo1->Lines->Strings[Memo1->Lines->Count -1] + Buffer.SubString(Start, Stop-Start);

// 님이 보신 에러는 배열에서 나온 에러입니다.
// 예)
// 배열 Buffer의 길이가 10 이라면
// 처음은 Buffer[0] 이고
// 마지막은 Buffer[9] 입니다.
// Buffer[10]을 읽으러고 하면 에러가 나지요.
// 사용시 보통 n-1 형태로 합니다.
// Start 나 Stop을 그냥 배열의 요소를 지정하는데
// 사용해서 나온 에러입니다.
// 따라서 Buffer[Strat-1], Buffer[Stop-1] 이렇게 해야
// 에러가 안납니다.

      if(Buffer[Stop-1] == CR)
      {
         Memo1->Lines->Add("");
         SendMessage(Memo1->Handle, WM_KEYDOWN, VK_UP,1);
      }

      Start = Stop +1;
      if(Start > Buffer.Length()) break;

      if(Buffer[Start-1] == LF) Start = Start +1;
// 이부분 파스칼 소스를 보니 if문 밖에 있네요.
// 님은 if문 안에 포함을 시켰구요.
      Stop = Start;

      while((Buffer[Stop-1] != CR) && Stop <= Buffer.Length())
         Stop = Stop +1;
   }

---------------------------------------------

짧은 생각으로 대충 설명을 달았는데....도움이 되었나요?





통일바라기 님이 쓰신 글 :
: 인디를 이용한 Telnet 데모 프로그램을 C++로 변환하려고 합니다.
: 그런데, 초보실력으로는 도무지 모르겠습니다.
:
: 파스칼 문법을 찾아가며 변환시킨다고 했는데도 뭔가 빠진것 같아서,
: 고수님들의 도움을 요청하고자 합니다.
:
: 실행하고서, 서버 연결을 요청하면 에러가 나고
:
:     char& __fastcall operator [](const int idx)
:     {
: *      ThrowIfOutOfRange(idx);   // Should Range-checking be optional to avoid overhead ??
:       Unique();                 // Ensure we're not ref-counted
:       return Data[idx-1];
:     }
:  위의 * 표시된 부분에서 에러가 난다고 나옵니다.
:
:  추정하건대, Buffer 데이터를 Memo1에 뿌려주면서 에러가 발생한듯 싶기는 합니다....
:
:
:
: < 델파이 소스>
:
: procedure TfrmTelnetDemo.IdTelnetDemoDataAvailable(Buffer: String);
:
: const
:     CR = #13;
:     LF = #10;
: var
:     Start, Stop : Integer;
:
: begin
:   if Memo1.Lines.Count = 0 then
:       Memo1.Lines.Add('');
:
:   Start := 1;
:   Stop  := Pos(CR, Buffer);
:   if Stop = 0 then
:       Stop := Length(Buffer) + 1;
:   while Start <= Length(Buffer) do begin
:       Memo1.Lines.Strings[Memo1.Lines.Count - 1] :=
:           Memo1.Lines.Strings[Memo1.Lines.Count - 1] +
:           Copy(Buffer, Start, Stop - Start);
:       if Buffer[Stop] = CR then begin
:           Memo1.Lines.Add('');
:           SendMessage(Memo1.Handle, WM_KEYDOWN, VK_UP, 1);
:       end;
:       Start := Stop + 1;
:       if Start > Length(Buffer) then
:           Break;
:       if Buffer[Start] = LF then
:          Start := Start + 1;
:       Stop := Start;
:       while (Buffer[Stop] <> CR) and (Stop <= Length(Buffer)) do
:           Stop := Stop + 1;
:   end;
: end;
:
:
: <C++ 빌더로 변환시켜본 소스>
: void __fastcall TForm1::IdTelnet1DataAvailable(AnsiString Buffer)
: {
:    const CR = 13;
:    const LF = 10;
:    int Start, Stop;
:
:    if(Memo1->Lines->Count==0)
:       Memo1->Lines->Add("");
:    Start = 1;
:    Stop = Buffer.Pos(CR);
:    if (Stop == 0)
:       Stop = Buffer.Length() + 1;
:
:    while (Start <= Buffer.Length()) {
:       Memo1->Lines->Strings[Memo1->Lines->Count -1] =
:          Memo1->Lines->Strings[Memo1->Lines->Count -1] + Buffer.SubString(Start, Stop-Start);
:
:       if (Buffer[Stop] == CR) {
:          Memo1->Lines->Add("");
:          SendMessage(Memo1->Handle, WM_KEYDOWN, VK_UP,1);
:          // 이함수는 뭔지 모르겠는데, 추정해보면 Memo1으로 제어권을 넘긴다는 말인지...
:       }
:
:       Start = Stop +1;
:       if (Start > Buffer.Length())
:          break;
:
:       if (Buffer[Start] == LF) {
:          Start = Start +1;
:          Stop = Start;
:       }
:       while ((Buffer[Stop] != CR) && Stop <= Buffer.Length())
:          Stop = Stop +1;
:    }
: }
:
:

+ -

관련 글 리스트
25392 델파이 소스를 C++로...(Indy Telnet 프로그램) 통일바라기 2099 2003/04/28
25406     [답변] 변환 오류 + 엑세스 에러....잡아서 올립니다. 정성훈.해미 970 2003/04/29
25485         Re:[답변] 변환 오류 + 엑세스 에러....잡아서 올립니다. 통일바라기 1278 2003/05/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.