присвояването отхвърля грешката на квалификатора '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, но както виждате, почивката не е постоянен указател. Какво правя грешно тук?


person yasar    schedule 11.04.2012    source източник
comment
както виждате, почивката не е постоянен показател. Не можете да присвоите const (input) на член, който не е const (rest).. точно това се казва в съобщението за грешка. Опитваш се да го измъкнеш (discard), но не можеш да го направиш.   -  person    schedule 12.04.2012


Отговори (3)


input е указател към постоянен char и вие го присвоявате на указател към неконстантен char. Това тук може да е интересно четиво за вас.

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

можете също така да прехвърлите вашата променлива „input“ с тип (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