PChar — 널 종료 문자열
PChar — 널 종료 문자열
PChar 타입은 C 스타일의 널 종료 문자열(null-terminated string)을 표현하는 포인터 타입이에요. Free Pascal은 델파이식 PChar 구현을 지원해서, C에서 문자열을 다루던 방식 그대로 Pascal에서도 쓸 수 있죠.
본문
PChar는 Char 타입을 가리키는 포인터로 정의되지만, 추가적인 연산이 허용돼요. PChar 타입을 가장 쉽게 이해하는 방법은 "C 스타일의 널 종료 문자열을 다루는 포인터"라고 보는 거예요. 즉 PChar 변수는 Char 배열을 가리키는 포인터인데, 그 배열은 널 문자(#0)로 끝나요.
PChar 상수는 초기화하거나 직접 대입할 수 있어요. 다음 두 코드 조각은 완전히 동일한 결과를 내요.
program one;
var P : PChar;
begin
P := 'This is a null-terminated string.';
WriteLn (P);
end.
위 코드는 다음 코드와 같은 결과를 줘요.
program two;
const P : PChar = 'This is a null-terminated string.';
begin
WriteLn (P);
end.
이 예제들은 문자열의 내용을 Text 타입 파일에 쓸 수 있다는 것도 보여줘요. std C 라이브러리처럼 PChar 타입을 다루는 프로시저와 함수들은 strings 유닛에 들어 있어요. PChar가 Char 타입 변수의 포인터와 동등한 것이므로 다음과 같이 쓸 수도 있어요.
Program three;
Var S : String[30];
P : PChar;
begin
S := 'This is a null-terminated string.'#0;
P := @S[1];
WriteLn (P);
end.
이 코드는 앞의 두 예제와 같은 결과를 내요. 널 종료 문자열은 일반 Pascal 문자열처럼 더할 수 없어요. 두 PChar 문자열을 연결해야 한다면 strings 유닛의 함수를 써야 해요.
그렇지만 포인터 산술은 일부 가능해요. +와 - 연산자로 PChar 포인터에 연산을 할 수 있죠. 아래 표에서 P와 Q는 PChar 타입이고, I는 Longint 타입이에요.
| Operation | Result |
|---|---|
| P + I | P가 가리키는 주소에 I를 더해요 |
| I + P | P가 가리키는 주소에 I를 더해요 |
| P - I | P가 가리키는 주소에서 I를 빼요 |
| P - Q | 두 주소 사이의 거리를 정수로 반환해요 (P와 Q 사이의 문자 개수) |
더 알아보기
PChar는 C 문자열을 넘겨받아야 하는 외부 라이브러리 연동에서 자주 쓰여요. 문자열 조작이 필요하면 strings 유닛의 함수들을 활용하세요.