如何解决这个问题?如果我在另一个代码部分中使用该变量,为什么编译器声称它?
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;
}
答案 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;