在“Programming Pearls”:Strings of Pearls,第 15.3 节(生成文本)中,作者介绍了如何从输入文档中生成随机文本。在源代码中,有一些我不明白的东西。
for (i = 0; i < k; i++)
word[nword][i] = 0;
作者解释说:“在读取输入后,我们附加了 k 个空字符(因此比较函数不会跑到最后)。” 这个解释真的让我很困惑,因为在评论这两行之后它仍然很好用。为什么这是必要的?
这样做可以减少在进行逐个字符比较时必须处理的奇怪情况的数量。
alphabet
alpha___
如果您一次遍历这一个字母,并且末尾的空填充alpha
不存在,您将尝试检查下一个元素......并直接从数组的末尾运行。空填充基本上确保当一个单词中有一个字符时,另一个单词中有一个对应的字符。而且由于空字符的值为 0,因此较短的单词总是会被视为“小于”较长的单词!
至于为什么它似乎在没有这些线路的情况下工作,我能想到两个相关的原因:
alpha
is to alphabet
)。正如另一个答案中已经解释的那样,目的是空终止字符串。
但是我阅读了发布的链接,并且该循环没有意义。如果看一下使用的比较函数,在这种情况下,没有理由必须用零填充整个字符串。word[nword][0] = 0;
没有 for 循环的平原也可以正常工作。或者最好:
word[nword][0] = '\0';
用零填充整个字符串会增加相当多的开销执行时间。