4

ここでhを期待していますが、gを表示しています。なんで?

char *c="geek"; 
printf("%c",++*c);
4

3 に答える 3

9

未定義の動作である文字列リテラルを変更しようとしています。これは、プログラムが何を出力するか、または実際にプログラムが何かを出力するかどうかについて、明確なことは何も言えないことを意味します。

試す:

char c[]="geek"; 
printf("%c",++*c);

詳細については、FAQを参照してください。

于 2012-11-08T09:04:03.160 に答える
0

それundefined behaviourはあなたが修正しようとしているからですstring literal

* cは文字を与えます'g'が、これを適用すると++*cはあなたがやろうとしていることを意味します

*c=*c+1;文字列とその未定義の言語標準を変更しています

char「文字列」リテラルは読み取り専用メモリに格納され、変更するとこれが発生するため、配列を使用してこれを解決することをお勧めします。

于 2012-11-08T09:05:24.303 に答える
-1

式は次のように評価されます(++(* c))、

最初に内側の*Cが評価されるため、gが出力されます。次に、インクリメント演算子がポインタ変数Cに適用されます。このprintステートメントの後、ポインタcは次の文字「e」を指します。

于 2012-11-08T09:05:30.227 に答える