предупреждение: назначение отбрасывает квалификаторы из целевого типа указателя - PullRequest
30 голосов
/ 13 августа 2010

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

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[].

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

Ответы [ 2 ]

41 голосов
/ 13 августа 2010

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

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

5 голосов
/ 13 августа 2010

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

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