1

ポインタ演算を実行したいvoidポインタがあります。そうするために、私はそれをcharポインタにキャストしたいと思います。

( char * ) buf += current_size;

ただし、そうすると、次のエラーが発生します。

error: lvalue required as left operand of assignment

左側全体にも括弧を入れてみましたが、うまくいきませんでした。なぜ私はこれを手に入れるのですか?

4

3 に答える 3

5

なぜ私はこれを手に入れるのですか

言語規則が、オペランドが1であっても、キャストは左辺値を生成しないと述べているからです。

ISO / IEC 9899:201x-n1570

脚注、91ページ

キャストは左辺値を生成しません。

于 2012-08-26T17:06:00.403 に答える
5

代入演算子を書き出すことで、警告を回避できます。

buf = (char *)buf + current_size;

警告が表示される理由の1つは、sizeof(void)未定義であり、で算術演算を実行できないことですvoid *。注意:GCCには拡張機能があり、コードをのように扱いますsizeof(void) == 1が、C標準にはありません。

割り当てのLHSでのキャストは、割り当てに影響を与えません。

于 2012-08-26T17:07:19.730 に答える
4

無効であるため、これを行うことはできません。これを達成したい場合は、

bufをcharポインタとして宣言します。または一時変数を使用します。

char *tmp = buf; // note you don't need the casting, void * works with everything
tmp += current_size;
buf = tmp;

編集:他の人も示唆しているように、その醜いtmpを削除することもできます:

buf = (char *)buf + current_size;
于 2012-08-26T17:07:09.877 に答える