2012-03-11 3 views
1

Как это исправить? Почему компилятор утверждает об этом, если я использую переменную в других частях кода?Вычисленное значение не используется

void replace(char ** src, const char s, const char replace) { 
    while(*(*src) != '\0') { 
     if(* (*src) == s) { 
     news[size] = replace; 
     } else { 
     news[size] = *(*src); 
     } 
     *(*src) ++; // the error line 
     size++; 
    } 
    *src = news; 
} 
+1

Какова фактическая ошибка, которую вы получаете? –

+0

@AndrewMarshall: добавлен полный код. – Jack

+1

@Jack: И все же не сообщение об ошибке ... Вы увеличиваете значение, а не указатель. «Char **» разыменовывается дважды «char». –

ответ

4

Когда вы *(*src)++ вы в основном разыменования src, то делает приращение постфиксный на указатель, затем разыменования указателя. Это ошибка. Вы не используете окончательное значение, поэтому компилятор предупреждает вас.

Что вы действительно хотите: (**src)++; т. е. разыгрывать дважды, а затем увеличивать.

+0

Postfix '++' и '*' do ** not ** имеют одинаковый приоритет, хотя префикс '++' и '*' делают. Однако приоритет, который они * делают *, не меняет ваши рассуждения. –

+0

@AndrewMarshall Спасибо, мой плохой. Я обновил его сейчас. – Manish

0

Двойное разыменование очень сбивает с толку; Вы должны упростить указатели:

char *srcp = *src; // Or whatever type it is. 
while (*srcp != '\0') 
{ 
    if (*srcp == s) 
    { 
     news[size] = replace; 
    } 
    else 
    { 
     news[size] = *srcp; 
    } 
    srcp++; 
    size++; 
} 
0

Отдельные флаги в вашем компиляторе не позволяют вам изменять переменную без ее использования (присваивая ее чему-то). Проблема в том, что вы отменяете указатель без использования его значения. Способ исправить это выглядит следующим образом:

Если вы пытаетесь увеличить указатель просто сделать это:

(* ЦСИ) = (* ЦСИ) + 1;

Если вы пытаетесь, чтобы увеличить конечное значение, сделайте следующее:

(** ЦСИ) = (** ЦСИ) + 1;

Смежные вопросы