Pascal文字列

Pascal文字列をgccで使うメモ。

Pascal文字列とは、

[文字列長] [A] [B] [C]

というバイト列で表現される文字列。文字列長が1byteなので、長さの上限は255byte。型はunsigned char[]。

普通のC文字列は

[A] [B] [C] [\0]

とNULL終端で表されますが、Pascal文字列の場合、本来NULL終端は必要ない。
が、gccの場合、C文字列としても扱えるように、NULL終端を付与するみたい。


以下、例。

#include <unistd.h>

int main(int argc, char *argv[])
{
	unsigned char a[] = "\pabc";
	write(1, a, 4);
	return 0;
}


gccの場合、-fpascal-strings オプション付きでコンパイルする。

$ gcc test.c -fpascal-strings


出力をhexdumpしてみると

$ ./a.out | xxd
0000000: 0361 6263                                .abc

となる。

\p という部分が、0x03 としてコンパイルされている。
なお、この場合 sizeof(a) は 5 になる(NULL終端が入るため)。


ちなみに255文字を超えてると

error: Pascal string is too long

とかおこられる模様。