我尝试反转单词,但遇到一些我无法解释且不知道该怎么做的问题。
new word{8};
GetWord(coords, word);
printf ("%s\n", word);
new doubleWord {16};
new reversedWord {16};
strcat (doubleWord, word, 16);
printf ("doubleword = %s\n", doubleWord);
strcat (doubleWord, word, 16);
printf ("doubleword = %s\n", doubleWord);
ReverseWord(doubleWord, reversedWord);
strcat (reversedWord, reversedWord, 16);
printf ("doubleword = %s, length = %d\n", doubleWord, strlen(doubleWord));
printf ("doubleword = %s, reverseword = %s\n", doubleWord, reversedWord);
我的反向功能:
ReverseWord(word{}, rev{}) {
for (new i = 0; i < 8; i++){
rev{i} = word{8-i};
}
}
在函数中,我只反转一个部分,因为doubleWord
它只是处理单词并且反转哪个部分并不重要。然后我将它连接起来,然后这个值doubleWord
就消失了。我不知道如何解释这一点,也没有在 PAWN 指南中找到解释。这里有结果的截图。
我当然会尝试颠倒整个单词。像这样:
ReverseWord(word{}, rev{}) {
for (new i = 0; i < 16; i++){
rev{i} = word{15-i};
}
}
并删除strcat
:
printf ("doubleword = %s\n", doubleWord);
ReverseWord(doubleWord, reversedWord);
printf ("doubleword = %s, length = %d\n", doubleWord, strlen(doubleWord));
但后来我最终reversedWord
得到doubleWord
了价值。这里有结果的截图。
在第二个版本中,我还尝试从末尾strdel
删除值:doubleWord
printf ("doubleword = %s\n", doubleWord);
ReverseWord(doubleWord, reversedWord);
strdel(reversedWord,16,32);
printf ("doubleword = %s, length = %d\n", doubleWord, strlen(doubleWord));
谁能解释发生了什么?PAWN 是否记住堆或堆栈中变量的值并获取最后使用的变量?我怎样才能扭转这个词的原因?