【发布时间】:2019-09-07 23:01:25
【问题描述】:
使用cvs 时的一个想法是通过重新使用字符串缓冲区来帮助垃圾收集器,例如
/s 5 string def
s 2 cvs %...
s 66 cvs %...
但是在循环中做这样的事情时,实际上在缓冲区中找到的字符串是:
(-40.0)
(-30.0)
(-20.0)
(-10.0)
(0.0.0)
(10.00)
(20.00)
(30.00)
(40.00)
所以转换结束时字符串似乎没有终止(在 GhostScript 9.26 中找到)。不幸的是,GhostScript 参考手册对于字符串是否会被终止有些沉默。
所以问题是:预期的行为是什么?
当尝试类似val str dup 2 0 put cvs 时,结果是(如== 所示):
(-40.0)
(-30.0)
(-20.0)
(-10.0)
(0.0\0000)
(10.00)
(20.00)
(30.00)
(40.00)
那么重用字符串缓冲区毕竟是个坏主意吗?
更新 1:
我发现放入堆栈的值是正确的,而缓冲区中的值不正确:
val s1 cvs pop % leaves the wrong value in s1
val s1 cvs /s2 exch def % leaves the correct value in s2
【问题讨论】:
标签: string data-conversion postscript