Операнд указателя требуется при объединении строк указателя - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь объединить строку 2 за строкой 1, а затем назначить эту строку в окончательную строку.Все эти строки передаются в функцию как указатели.Я получаю сообщение об ошибке, когда устанавливаю свой последний строковый указатель на две строки.

Мой ожидаемый ввод / вывод:

concat("string", 10, "hello", "world");
--> char *final should be: helloworld

Моя функция concat:

void concat(char *final, size_t max, const char *first, const char *second)
{
    //final holds first+second
    //max is the size of first and second strings combined
    //first and second are strings

    while (*first != '\0') {
        first++;
    }
    while (*second != '\0') {
        *first = *second;
        first++;
        second++;
    }
    *first = '\0';
    *final[max] = *first;    // Error on this line
}

Моя ошибка (строка 15):

Indirection requires pointer operand ('int' invalid)

edit: const может быть удалено, чтобы избежать ошибки назначения переменной только для чтения.

1 Ответ

0 голосов
/ 28 января 2019

final - указатель на char.final[max] - это символ в позиции max относительно final.Он эффективно включает в себя операцию *, поэтому вам она не нужна.В *final[max] = *first; первый * не нужен.

Фактически, final[max] определен как *(final + max), то есть для получения указателя final, отрегулируйте его с помощью элементов max, а затем обратитесь к char, который находится в этом месте.*final[max] будет **(final + max), а это не то, что вам нужно.

Непонятно, чего вы намерены достичь с помощью final[max] = *first;.На этом этапе first указывает на '\0', который вы только что написали, поэтому final[max] = *first; установит final[max] в '\0'.

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