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' 我留给你,但这就是为什么在调用你的频率计数器之后,你的单词数组似乎“丢失了它的引用”的原因。
我能够找到最常见的字母,但是当我再次尝试打印 **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' 我留给你,但这就是为什么在调用你的频率计数器之后,你的单词数组似乎“丢失了它的引用”的原因。