파스칼 문자열은 문자열을 NULL로 끝내지 않고 문자열의 0번째 오프셋에 문자열의 크기를 저장해두는 방식이다...

그리고 문자열의 1번째 오프셋부터 아스키문자열이 들어간다... 근데 이렇게 하면 문자열으 최대 크기가 255바이트밖에 되지 않는다...!!!

이런걸 알아서 무엇에 쓸가?!?


ASCIZ문자열(문자열이 zero, 그니까 NULL로 끝나는 아스키 문자열)을 이용해 문자열 붙이기 함수 strcat()을 구현해보쟈...


void strcat (char *dest, char *src) {

  while (*dest++);

  while (*dest++ = *src++);

}


이러케 간단히 구현할 수 잇슬것이다...

그래서 아래 코드를 실행한다면 자알 작동할 것인가?!?


char string[1000] = "This ";

strcat(string, "station ");

strcat(string, "is ");

strcat(string, "Mangwolsa, ");

strcat(string, "Mangwolsa.");


물론 string에 담긴 결과는 "This station is Mangwolsa, Mangwolsa."가 될 것이다...

허지만 이거시 과연 최선일가?!?

문자열이 길어질수록 strcat의 첫번째 while문의 회전 수가 증가하기 때문에 아아주 비효율적이다...

따라서 똘똘이 부로구레머는 이런 개선을 생각할 수 도 잇따...


char *strcat (char *dest, char *src) {

  while (*dest++);

  while (*dest++ = *src++);

  return --dest;

}


그리고 호출할때는 이러케 할거시다...


char string[1000] = "This ";

char *p = string;

p = strcat(p, "station ");

p = strcat(p, "is ");

p = strcat(p, "Mangwolsa, ");

p = strcat(p, "Mangwolsa.");


이러케 한다면 strcat함수의 첫번째 while문은 거이 무시할수 잇슬거시다...!!!

그런데 이런 방식을 선택한다면 함수에 대해 미리 알아야할 정보가 늘어난다..

strcat이 아니더라도 문자열 함수는 만타... 구래서 부로구레머는 점점 더 많은 것을 이해하고 잇서야 할 거시디ㅏ..


파스칼 문자열은 그런 불편함을 줄여준다...!!!

비록 255바이트 문자열밖에 저장하지 몬허지만...

구레서 데이터베이수 등에서 탐색속도 땜시 이 아이디어룰 응용한 방식이 마늬 이용된다...


그리고 또 중요헌것...!!!

ASCIZ문자열은 문자열 중간에 0이 올수 업스므로 이진 갑슬 담지 못허지만...!!!

파수칼 문자열은 문자열 중간에 0이 오든 멋이 오든 상관없다는 거시다...!!!


모든 쏘오쓰는 조엘 온 소프드웨어에서 대충 봣던 거십니다

기억을 토대로 작성햇스므로 정확하지 안을수 잇습니다