Вопрос по c – Ошибка «назначение отбрасывает спецификатор const» в неконстантном указателе

1

В следующей функции:

<code>char *mystrtok(const char *input, const char *delim,char *rest) {
    int i;
    for (i = 0; input[i] != *delim && input[i] != '\0'; ++i) {
        continue;
    }
    char *result = malloc(sizeof(char) * (i + 2));
    memcpy(result, input, i + 1);
    result[i + 1] = '\0';
    if (input[i + 1] != '\0') 
        rest = input + i + 2;
    else
        rest = NULL;
    return result;
}
</code>

я получаюassignment discards 'const' qualifier from pointer target type для линииrest = input + i + 2Однако, как вы можете видеть, rest не является постоянным указателем. Что я здесь не так делаю?

& Quot; как видите, rest не является постоянным указателем & quot ;. Вы не можете назначить const (input) неконстантным (rest) .. это именно то, что говорится в сообщении об ошибке. Вы пытаетесь отогнать его (discard), но вы не можете этого сделать. user195488
Ноinput являетсяconst... Mysticial

Ваш Ответ

3   ответа
0

char *mystrtok(const char *input, const char *delim, const char *rest);
5

input указатель на постоянный символ, и вы назначаете его указателю наnon-constant голец.Это здесь может быть интересным чтением для вас.

@ yasar11732: О чем ты говоришь?
Хм, я имел в виду использовать постоянные указатели, а не постоянный символ. :( yasar
@ yasar11732 прочитайте статью, на которую я ссылался, это очень распространенная путаница :-)
@ 0A0D моя цель состояла в том, чтобы сделать адрес, на который указывает указатель (значение указателей), постоянным. Я не пытался создать значения по константе этого адреса. yasar
@ yasar11732 тогда тебе нужноchar * constError: User Rate Limit Exceeded
0

который разрешит предупреждение. просто будьте осторожны, используя явное приведение типа этого, чтобы не изменять сами константы.

rest = (char*)input + i + 2;

Похожие вопросы