如何解决如何使用gforth将任何内容写入vars文件?
当我尝试时:
0 value output
\ some other code
50 testvar !
: test
s" .test" r/w open-file throw fd-out
testvar @ fd-out write-line throw
fd-out write-file throw
fd-out close-file throw
;
我遇到了内存地址错误
fd-out write-file
:119: Invalid memory address
fd-out >>>write-file<<<
Backtrace:
我指的是official documentation,但根据所设置的变量(可以是文本和数字(两者)),我什么地方也找不到正确的内存地址。
解决方法
Francois,
在s" .test" r/w open-file throw fd-out
中,fd-out是否获得正确的值?假设to
是用Value定义的,我希望在fd_out
之前有fd_out
。
write-line
需要一个字符串(write-line ( c-addr u fileid -- ior )
文件:常规文件),请参见https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Word-Index.html#Word-Index
因此s" 50"
可以代替write-line
而不是testvar @
使用,因为它不完整,因为堆栈上还需要一个字符串地址。
write-file
还需要一个字符串(write-file ( c-addr u1 fileid – ior )
文件:常规文件),而不仅仅是fd_out
。
有了这些更改,它应该可以工作,祝您好运!
, WRITE-LINE
使用文件句柄和字符串,并将字符串写入文件。字符串只是由地址和长度标识的缓冲区。
要以文本形式编写数字,我们需要将此数字从二进制转换为文本形式。
该标准为此仅提供了低级单词。库可以提供诸如u-to-s
之类的单词,以将无符号数字转换为文本。
: u-to-s ( u -- c-addr u ) 0 <# #s #> ;
结果( c-addr u )
位于transient buffer中。
使用此帮助词,您的测试可以重写为以下内容:
: test
".test" r/w open-file throw to fd-out
testvar @ u-to-s fd-out write-line throw
"test passed" fd-out write-file throw
fd-out close-file throw
;
Gforth has $tmp ( xt -- c-addr u )
单词,将输出重定向到一个临时字符串。所以你可以做
[: testvar @ . ;] $tmp fd-out write-line throw
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。