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[].
Кто-нибудь знает, почему я получаю его и как его исправить?
Ответы
Ответ 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 отбрасывается, если вы это сделаете.