不使用计算的值

时间:2012-03-11 21:53:34

标签: c variables

如何解决这个问题?如果我在另一个代码部分中使用该变量,为什么编译器声称它?

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;
}

3 个答案:

答案 0 :(得分:4)

执行*(*src)++时,您基本上解除引用src,然后对指针进行后缀增量,然后取消引用指针。这是一个错误。你没有使用最终值,这就是编译器警告你的原因。

你真正想要的是(**src)++;即取消引用两次然后增加。

答案 1 :(得分:0)

双重解除引用非常混乱;你应该简化指针:

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

答案 2 :(得分:0)

编译器上的特定标志不允许您在不使用它的情况下对变量进行derefrence。(将其分配给某些东西)问题是您在不使用其值的情况下解除指针。修复它的方法如下:

如果您尝试增加指针,请执行以下操作:

  

(* src)=(* src)+ 1;

如果您尝试增加最终值,请执行以下操作:

  

(** src)=(** src)+ 1;