присваивание отбрасывает ошибку квалификатора 'const' для неконстантного указателя

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

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

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


person yasar    schedule 11.04.2012    source источник
comment
как видите, rest не является постоянным указателем. Вы не можете назначить константу (input) члену, не являющемуся константой (rest). Это именно то, о чем говорится в сообщении об ошибке. Вы пытаетесь его увести (discard), но у вас не получается.   -  person    schedule 12.04.2012


Ответы (3)


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

person littleadv    schedule 11.04.2012
comment
@yasar11732 yasar11732, тогда вам нужно char * const - указатель постоянен, а не то, на что он указывает. - person littleadv; 12.04.2012

вы также можете указать свою «входную» переменную с типом (char *), который устранит предупреждение. просто будьте осторожны, используя такие явные приведения, чтобы не изменять сами константы.

rest = (char*)input + i + 2;
person midnightCoder    schedule 22.11.2016
comment
Я пробовал это, и я все еще получаю предупреждение. - person flarn2006; 18.07.2021

изменить прототип на

char *mystrtok(const char *input, const char *delim, const char *rest);
person pizza    schedule 11.04.2012