C - Передача массива между функциями не дает ожидаемых результатов - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь передать массив символов из одной функции в другую. Массив, кажется, переходит во вторую функцию, но содержимое массива, похоже, потеряно, кроме первого элемента? Чтобы обойти это, я попытался продублировать содержимое переданного массива в новый локальный массив в вызываемой функции, но затем возникла проблема передачи нового массива обратно в исходную вызывающую функцию и присвоения его значения первоначально переданному массиву. в массиве.

Скорее всего, мои указатели могут быть полностью неверными, я все еще сталкиваюсь с указателями в 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;
        }
    }
}

Мне было интересно, что я делаю неправильно, я надеюсь изменить функцию напрямую, когда она передается «По ссылке» (я Я знаю, что это указатель на начало массива), вместо того, чтобы переделывать массив внутри функции и передавать его обратно.

Надеюсь, это имеет какой-то смысл?

Большое спасибо

1 Ответ

1 голос
/ 09 января 2020

В функции все, что у вас есть, - это указатель на первый элемент массива. Программа (или компилятор, и, как вы заметили, даже не отладчик) на самом деле не знает, на что в действительности указывает указатель внутри функции.

В этом нет ничего плохого, просто как C и массивы и указатели в C работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...