首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Gforth在多个字符串连接上的堆栈下溢

使用Gforth在多个字符串连接上的堆栈下溢
EN

Stack Overflow用户
提问于 2014-03-12 18:42:53
回答 1查看 545关注 0票数 2

罗塞塔码中,我使用以下方法连接Forth中的字符串。

代码语言:javascript
复制
s" hello" pad place
pad count type
s"  there!" pad +place
pad count type

使用此代码,我希望能够将多个字符串连接在一起。但是,以下内容在Gforth上失败了

代码语言:javascript
复制
s" hi " pad place 
s" hello " pad place
s" world" pad 
+place
pad +place
pad count type

从我的基本Forth公开中,我看到代码将三个字符串放在堆栈上,然后在堆栈顶部加上下面的字符串,然后用底部的字符串在堆栈上追加新字符串。

为什么这个代码会在最后一个+位置下运行呢?有办法绕道吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-12 19:46:05

第二个片段将"hi“复制到内存位置pad,然后将"hello”复制到同一个位置(覆盖"hi ")。

因此,当您尝试第一个+place时,它从堆栈中获取"world“的addr u引用,然后将"world”附加到"hello“。所以如果你试着

代码语言:javascript
复制
s" hi " pad place 
s" hello " pad place
s" world" pad +place

//Display the string at pad
pad count type

你应该看看hello world ok

此时,您的所有place+place单词都用完了堆栈上的所有字符串引用。如果你刚刚运行

代码语言:javascript
复制
s" hi " pad place 
s" hello " pad place
s" world" pad 
+place

//Check the stack
.s

你会看到一个空堆栈。

现在,当您再次使用pad时,它会将pad所代表的地址推到堆栈中。因此,下一个+place在堆栈上没有字符串引用供其复制,因此失败。

要解决这个问题,你需要的是这样的东西

代码语言:javascript
复制
s" hi " pad place 
s" hello " pad +place
s" world" pad +place
pad count type

在这段代码中,"hello“不覆盖"hi”,而是附加到它之后,因此下一个+place在堆栈上有正确的参数,并按预期工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22360976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档