e5788.c
ポインタ引数のポインタを進めるか中身を増やすか




/* 警告: A:e5788: *p++としてポインタ引数のポインタを移動していますが、
(*p)++としてポインタの中身を更新したかったのでは無いですか?(もしくはp++で十分です) */
修正前
bool count_space(char* str, int *count)
{
if(str == NULL)
{
return false;
}
*count = 0;
while(*str)
{
if(isspace(*str))
{
*count++; /* 中身は変わらずポインタが進むだけなので間違い */
}
*str++; /* 誤動作では無いが、無意味な処理が混じっており分かりにくい */
}
return true;
}
修正後
bool count_space(char* str, int *count)
{
if(str == NULL)
{
return false;
}
*count = 0;
while(*str)
{
if(isspace(*str))
{
(*count)++;
}
str++;
}
return true;
}
解説
ポインタ引数のポインタを進めても呼び元のポインタが進むわけでは
無いため、意味が無くポインタの指している先の値のインクリメントと間違えている場合が多いです。
本当にポインタを進めたかった場合は、p++;
ポインタの指している値を増やしたかった場合は(*p)++;と
するべきです。