Q&A

  • fillchar에서... 무슨뜻인지 도와주세요..
안녕하세요 초보델파이 프로그래머입니다 ^^;

델파이에 있는 fillchar example인데요,

var
  S: array[0..79] of char;
begin
  { Set to all spaces }
  FillChar(S, SizeOf(S), #0);
end;

fillchar가 왜필요한지, 세번째로 오는 #0은 뭘 뜻하는 건지 아리송합니다.
도움글을 읽어봐도.. 워낙 제가 이해력이 없어서..  가르쳐주세요~
4  COMMENTS
  • Profile
    신현빈 2002.05.03 22:22
    보통 메모리를 할당 받게 되면은 아무것도 저장되지 않은 깨끗한 자리를 할당받는게 아닙니다.
    이미 다른 핸들러에 의해서 사용(저장)되었던 쓰레기 값들이 들어있지요.
    그리고 Char어레이를 사용하는 경우는 대게 문자열을 다루는데에 목적이 있으므로 널 값으로 할당된 메모리를 가득 채우는 겁니다.

    안 그럼 문자열 함수 사용할 때에 바로 Access Violation 에러가 뜰겁니다.
    왜냐하면 문자열 함수는 시작 주소로 부터 널값을 찾아 계속 이동하기때문이죠..
    그래서 결국 엉뚱한 메모리 영역을 침범하게 되고 델파이는 바로 Access Violation 에러를 내보내게 됩니다.

    때문에 FillChar를 사용하여 널값으로 채워놓는 것이죠..널값찾아 삼만리 하지 말라고..^^

    참고로 문자열의 끝을 의미하는 널 값을 델파이에선 #0로 표현합니다.


  • Profile
    KDDG_RepleMan 2002.05.02 21:25


    아래와 같은 내용입니다.
    var
      S: array[0..79] of char;
    begin
      { Set to all spaces }
      FillChar(S, SizeOf(S), ' ');
    end;

    #0 : Null 값을 의미 합니다.

    델파이에서 # 다음에 숫자를 표기하면 <ASCII 코드> 를 의미하는 것으로 알고 있습니다.

    예: #13 ==> Enter  이런식으로..

    FillChar는 특정 문자열(?)을 초기화 할 경우 사용되는 프로시져 인것 같습니다.
  • Profile
    강형철 2002.05.03 00:16
    잘못된 부분이 있네요?

    FillChar( S, SizeOf(S), ' ' );  이부분이 잘못되었군요...

    이건 컴파일시 에러가 납니다.. 형이 틀리기 때문이죠..

    3번째 인수는 Byte형입니다.

    FillChar( S, SizeOf(S), 0 ) 와 동일합니다.

    그럼 20000
  • Profile
    리플맨 2002.05.03 00:34

    아 ~하 그렇군요. 확인해보지 않아서.... 죄송~~~

    델파이4의 help에 있는 내용을 그대로 복사한 건데...
    Null 값이라는 의미를 확실하게 알려주기 위해서...