gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:06 28 4
gpt4 key购买 nike

来自 Rosetta code ,我使用以下方法在 Forth 中连接字符串。

s" hello" pad place
pad count type
s" there!" pad +place
pad count type

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

s" hi " pad place 
s" hello " pad place
s" world" pad
+place
pad +place
pad count type

根据我对 Forth 的基本了解,我看到代码将三个字符串放入堆栈,然后将堆栈顶部的字符串附加到它下方的字符串,然后将新字符串再次附加到堆栈底部的字符串.

为什么这段代码在最后一个+地方下溢?有解决办法吗?

最佳答案

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

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

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 单词都已用完堆栈中的所有字符串引用。如果你只是运行检查这个

s" hi " pad place 
s" hello " pad place
s" world" pad
+place

//Check the stack
.s

您会看到一个空堆栈。

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

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

s" hi " pad place 
s" hello " pad +place
s" world" pad +place
pad count type

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

关于string - 使用 Gforth 在多个字符串连接上堆栈下溢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22360976/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com