2012-03-11 93 views
1

これを修正するには?私が別のコード部分で変数を使用している場合、なぜコンパイラはそれを主張していますか?計算された値は使用されません

+1

実際のエラーは何ですか? –

+0

@AndrewMarshall:フルコードを追加しました。 – Jack

+1

@Jack:しかし、エラーメッセージではありません...あなたはポインタではなく値を増やしています。 2度間接参照される 'char **'は 'char'です。 –

答えて

4

あなたは基本的にポインタに後置インクリメントをやって、その後、src*(*src)++逆参照しているん場合は、その後、ポインタを参照解除します。それはバグです。最終的な値を使用していないので、コンパイラが警告します。

本当に欲しいのは(**src)++です。すなわち2回逆参照し、次に増分する。

+0

Postfix '++'と '*' do ** not **は同じ優先順位を持ちますが、接頭辞 '++'と '*'は同じです。しかし、彼らが行っている優先順位はあなたの推論を変えません。 –

+0

@AndrewMarshallありがとう、私の悪い。私は今それを更新しました。 – Manish

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;

関連する問題