何时可以将字符串分配给数组?

何时可以将字符串分配给数组?

第 51 节中tex.web有这样的内容:

name_of_file ← pool_name; { we needn’t set name length }

哪里name_of_file是(第 26 节):

name_of_file : packed array [1 .. file name size ] of char;

并且pool_name(第 11 节):

pool_name = 'TeXformats:TEX.POOL                   ';
  { string of length file_name_size; tells where the string pool appears }

这样的字符串分配是 Pascal 的一个特性吗?在什么情况下 Pascal 允许进行字符串分配?(如上面的第 51 节)必要条件是数组和分配的字符串必须具有相同的大小吗?

类似情况也出现在第 520 和 521 节。

答案1

是的,Knuth 使用的 Pascal 参考仅允许分配具有相同长度的字符串。Pascal 中的字符串是基类型的数组字符索引类型这是整数的子范围,即 1..n。当然,Knuth 没有留下未分配的字节。(这就是为什么池名称获取文件名_大小(另一个问题中的字符。)

Knuth在文章的第 10 节中tex.web指出,他遵循 Jensen/Wirth 的用户手册和报告1974 年;Pascal 语言的原始定义。他提出了一些例外情况——在上述书中的定义含糊不清或使代码混乱的情况下明确指出。例如,在案件声明他接受了 else/otherwise 部分。

在 1978 年的修正版中,该书第 41 页指出,包含 n>1 个字符的字符串是压缩数组[1..n]char。下一句是“赋值(:=)可以在完全相同的数组类型。''

我对 Knuth 使用的 Pascal-H 编译器了解不多。例如,后来的 Pascal(扩展 Pascal 的标准)允许对字符串进行更灵活的分配。

相关内容