C 丢失指向指针引用的指针

C Losing pointer to pointer reference

我能够找到最常见的字母,但是当我再次尝试打印 **words 中的元素时,我给出了 \000 个值。

我试图将 head 存储到另一个变量中,但似乎我仍然丢失了所有引用。 我也试图将它作为常量传递,但我仍然失去了参考。 void findFrequentLetter(const char **words) 并且还用 const 修改了调用。我怎样才能使这项工作?

我知道问题出在第一个 for(while()) 循环中。

void findFrequentLetter(char const **words) {
   int array[255] = {0}; // initialize all elements to 0
   char str[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   int i, max;
   for (int d = 0; d < nb_words; ++d) {
      while (**words != '[=10=]'){
         ++array[**words];
         ++(*words);
      }
      ++words;
   }
// Find the letter that was used the most
   max = array[0];
   int index = 0;
   for (i = 0; str[i] != 0; i++) {
      if (array[str[i]] > max ) {
         max = array[str[i]];
         index = i;
      }
   }
}

这是错误的:

for (int d = 0; d < stats->mot_sans_doublons; ++d)
{
    while (**words != '[=10=]')
    {
        ++array[**words];
        ++(*words); // <===== HERE
    }
    ++words;
}

你的代码被赋予了一个指针数组的基地址。这些指针中的每一个都指向一个字符串。上面有问题的行使该数组中的指针前进...... 永久。底层指针数组使该数组中的每个指针永久走到各自字符串的末尾。

遍历这些字符串的正确方法是通过中间指针。不要以任何方式修改words的内容。例如:

for (int d = 0; d < stats->mot_sans_doublons; ++d)
{
    for (const char *s = words[d]; *s; ++s)
        ++array[(unsigned char)*s];
}

你的代码的其余部分 'works' 我留给你,但这就是为什么在调用你的频率计数器之后,你的单词数组似乎“丢失了它的引用”的原因。