2012-03-11 60 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;