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