Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-在函数之间传递数组,但未给出预期结果_C_Arrays_Function_Pointers - Fatal编程技术网

C-在函数之间传递数组,但未给出预期结果

C-在函数之间传递数组,但未给出预期结果,c,arrays,function,pointers,C,Arrays,Function,Pointers,我想尝试将一个字符数组从一个函数传递到另一个函数。数组似乎传递到第二个函数中,但数组的内容似乎丢失了,除了第一个元素?为了解决这个问题,我尝试将传递的数组的内容复制到被调用函数中的一个新的本地数组中,但这就打开了将新数组传递回原始调用函数并将其值赋回原始传入数组的问题 我的指针可能是完全错误的,我仍然在掌握C语言中的指针,所以一直遵循IDE的提示,直到它停止抛出错误 下面是我调用函数的方式: void wordCheck(char guess, char *wordToGuess, char *

我想尝试将一个字符数组从一个函数传递到另一个函数。数组似乎传递到第二个函数中,但数组的内容似乎丢失了,除了第一个元素?为了解决这个问题,我尝试将传递的数组的内容复制到被调用函数中的一个新的本地数组中,但这就打开了将新数组传递回原始调用函数并将其值赋回原始传入数组的问题

我的指针可能是完全错误的,我仍然在掌握C语言中的指针,所以一直遵循IDE的提示,直到它停止抛出错误

下面是我调用函数的方式:

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;
        }
    }
}
wordCheck(charIn、randWord、currentWordStatus)

要更新/修改的数组是
currentwordstatus
数组

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

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;
        }
    }
}

下面是它如何在函数中结束的:

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;
        }
    }
}

以下是我调用的函数的代码:

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;
        }
    }
}
void-wordCheck(char-guess,char*wordToGuess,char*currentWordStatus){
int-wordLen=strlen(无字);
char-wordArr[wordLen];
strcpy(&wordArr[0],wordToGuess);
bool-found=false;
for(int i=0;i
我想知道我做错了什么,我希望在函数“通过引用”传递时直接修改它(我知道它是指向数组开头的指针),而不是在函数内部重新生成数组并将其传递回去

希望这有点道理


非常感谢

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


没有什么错,只是C和C中的数组和指针是如何工作的。

char-wordArr[wordLen]应该是
char-wordArr[wordLen+1]
因为您还需要在复制的字符串末尾为空终止符字符留出空间。请注意,
&wordArr[0]
正好等于
wordArr
。当需要指针时使用数组名将使数组衰减为指向其第一个元素的指针。现在一切似乎都正常了,谢谢各位。非常感谢!实际上,您根本不需要将
wordToGuess
字符串复制到
wordArr[]
。直接使用
wordToGuess
。@IanAbbott我不知道你可以直接索引它们,而不用将它们复制到数组中。我仍然习惯于C语言中字符串的处理方式,它来自Java等语言。刚刚试过,效果很好。谢谢好吧,我明白了。这是否意味着实际上不可能将数组传递到函数中并按计划修改它?如果没有,你会建议我怎么做?@JackPollock只要你不超出任何数组的界限,代码是完全有效的。您仍然可以将指针用作数组,并且
currentWordStatus[i]
可以正常工作。