Pascal文字列
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
とかおこられる模様。