Подтвердить что ты не робот

Warning: присваивание отбрасывает квалификаторы из целевого типа указателя

Я написал следующий код:

void buildArrays(char *pLastLetter[],int length[], int size, const char str[]) {

    int i;
    int strIndex = 0;
    int letterCounter = 0;

    for (i=0; i<size; i++) {

        while ( (str[strIndex] != SEPERATOR) || (str[strIndex] != '\0') ) {
            letterCounter++;
            strIndex++;
        }
        pLastLetter[i] = &str[strIndex-1];
        length[i] = letterCounter;
        letterCounter = 0;
        strIndex++;
    }
}

и я получаю предупреждение выше pLastLetter[i] = &str[strIndex-1];

pLastLetter is a pointers array that points to a char in str[].

Кто-нибудь знает, почему я получаю его и как его исправить?

4b9b3361

Ответ 1

Ну, как вы сказали сами, pLastLetter - это массив указателей char *, а str - массив const char. Выражение &str[strIndex-1] имеет тип const char*. Вам не разрешено присваивать значение const char* указателю char *. Это нарушит правила const-correctness. Фактически, то, что вы делаете, является ошибкой в ​​компиляторах C. C. традиционно сообщают об этом как о простом "предупреждении", чтобы не нарушать старый код устаревшего кода.

Что касается "как это исправить"... Это зависит от того, что вы пытаетесь сделать. Либо сделайте pLastLetter массив const char*, либо удалите const из str.

Ответ 2

str - const, pLastLetter - нет. Он говорит, что спецификатор const отбрасывается, если вы это сделаете.