je suivais un example, en essayant de me expliquer ce qu'il fait:chaîne allouée statiquement dans allouée dynamiquement un
: place \ ptr len ptr2
2dup \ ptr len ptr2 len ptr2
>r >r \ ptr len ptr2
char+ \ ptr len (ptr2 + 1)
swap \ ptr (ptr2 + 1) len
chars \ ptr (ptr2 + 1) (len * char)
cmove \ --
\ from to how-many
r> r> \ ptr2 len
c! ; \ len = ptr2 ???
\ s" Hello! " name place
Tout fait sens, jusqu'à ce que la dernière instruction ... où est-ce que je me trompe ?
EDIT:
J'ai ajouté quelques traçage:
: place \ ptr len ptr2 |
2dup cr .s \ ptr len ptr2 len ptr2 | <5> 16490736 5 2126333248 5 2126333248
>r >r cr .s \ ptr len ptr2 | <3> 16490736 5 2126333248
char+ cr .s \ ptr len (ptr2 + 1) | <3> 16490736 5 2126333249
swap cr .s \ ptr (ptr2 + 1) len | <3> 16490736 2126333249 5
chars cr .s \ ptr (ptr2 + 1) (len * char) | <3> 16490736 2126333249 5
cmove cr .s \ -- | <0>
\ from to how-many |
r> r> cr .s \ ptr2 len | <2> 5 2126333248 ok
c! ; \ ptr2 = len ??? |
\ s" Hello! " name place
Désolé, il m'a fallu une éternité pour répondre. Oui, maintenant j'ai compris où était mon erreur. Je pensais que déplacer des données entre les piles était fifo, mais c'est lifo, donc je comprends ce qui est arrivé, maintenant. –
Ne vous inquiétez pas! Je suis content que tu l'as réglé. – sheepez