2012-03-11 54 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

你得到的實際錯誤是什麼? – 2012-03-11 21:57:07

+0

@AndrewMarshall:添加完整的代碼。 – Jack 2012-03-11 21:57:32

+1

@Jack:但不是錯誤消息...你正在增加值,而不是指針。一個'char **'被解除引用兩次是一個'char'。 – 2012-03-11 22:00:38

回答

4

當你做*(*src)++你基本上提領src,然後做上的指針後綴增量,然後取消引用指針。這是一個錯誤。你沒有使用最終值,這就是編譯器警告你的原因。

你真正想要的是(**src)++;即解除引用兩次然後遞增。

+0

Postfix'++'和'*'do ** not **具有相同的優先級,但前綴'++'和'*'可以。不過,他們的*優先權在這裏並沒有改變你的推理。 – 2012-03-11 22:11:43

+0

@AndrewMarshall謝謝,我的壞話。我現在更新了它。 – Manish 2012-03-11 22:25:07

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

編譯器上的特定標誌不允許你在不使用它的情況下去變量變量​​(分配給它)問題在於你在不使用它的值的情況下刪除指針。解決它的方法如下:

如果你試圖遞增指針只是這樣做:

(* SRC)=(* SRC)+ 1;

如果你想增加的終值,這樣做:

(** SRC)=(** SRC)+ 1;