【问题标题】:C - Passing array between functions not giving expected resultsC - 在函数之间传递数组未给出预期结果
【发布时间】:2020-01-09 16:18:36
【问题描述】:

我正在尝试将 char 数组从一个函数传递到另一个函数。数组似乎传入第二个函数,但数组的内容似乎丢失了,除了第一个元素?为了解决这个问题,我尝试将传递数组的内容复制到被调用函数中的新本地数组中,但这会引发将新数组传递回原始调用函数并将其值分配回最初传递的问题在数组中。

我的指针很可能完全错误,我仍在掌握 C 中的指针,因此一直遵循 IDE 的提示,直到它停止抛出错误。

这是我调用函数的方式:

wordCheck(charIn, randWord, currentWordStatus);

要更新/修改的数组是currrentWordStatus数组。

这是数组传入函数时的内容:

这是它在函数中的实际结束方式:

这是我调用函数的代码:

void wordCheck(char guess, char *wordToGuess, char *currentWordStatus) {

    int wordLen = strlen(wordToGuess);
    char wordArr[wordLen];
    strcpy(&wordArr[0], wordToGuess);
    bool found = false;

    for (int i = 0; i < wordLen; i ++) {
        printf("%c \n", (char)wordArr[i]);
        if ((char) wordArr[i] == guess) {
            found = true;
            currentWordStatus[i] = guess;
        }
    }
}

我想知道我做错了什么,我希望直接修改函数,因为它是通过“引用”传递的(我知道它是指向数组开头的指针),而不是必须重新制作函数内部的数组并将其传回。

希望这有某种意义?

非常感谢

【问题讨论】:

  • char wordArr[wordLen]; 应该是 char wordArr[wordLen + 1]; 因为在复制的字符串末尾还需要空终止符的空间。
  • 请注意,&amp;wordArr[0]完全等于wordArr。在需要指针时使用数组名称会将数组衰减为指向其第一个元素的指针。
  • 现在似乎一切正常,谢谢各位。非常感谢!
  • 您实际上根本不需要将wordToGuess 字符串复制到wordArr[]。直接使用wordToGuess即可。
  • @IanAbbott 我不知道您可以直接索引它们,而无需将它们复制到数组中。我仍然习惯于在 C 中如何处理来自 Java 等语言的字符串。刚刚尝试过,完美运行。谢谢!

标签: c arrays function pointers


【解决方案1】:

在函数中,你真正拥有的只是一个指向数组第一个元素的指针。程序(或编译器,甚至调试器都没有注意到)并不真正知道函数内部的指针真正指向什么。

没有错,这只是 C 和 C 中的数组和指针的工作方式。

【讨论】:

  • 好吧,我明白了。这是否意味着实际上不可能将数组传递给函数并按照我的计划进行修改?如果没有,你建议我怎么做?
  • @JackPollock 该代码完全有效,只要您不超出任何数组的范围。您仍然可以将指针用作数组,currentWordStatus[i] 很好并且可以工作。
猜你喜欢
  • 2012-05-07
  • 2019-12-28
  • 2019-07-20
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
相关资源
最近更新 更多