输出应该是什么?

时间:2012-11-08 09:01:07

标签: c pointers

我期待着这里。但是它显示了g。为什么呢?

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

3 个答案:

答案 0 :(得分:9)

您正在尝试修改字符串文字,即undefined behaviour。这意味着关于你的程序将打印出来的内容,或者确实是否它将打印出任何东西都没有明确的说明。

尝试:

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

有关进一步的讨论,请参阅FAQ

答案 1 :(得分:0)

这是undefined behaviour,因为您尝试修改string literal

* c会给出字符'g'但是当你应用这个++ * c意味着你正在尝试

*c=*c+1;修改字符串及其未定义的语言标准

最好使用char数组来解决这个问题,因为“string”文字存储在只读内存中并修改它会导致这种情况。

答案 2 :(得分:-1)

表达式将像这样评估(++(* c)),

首先评估内部* C,以便打印g。然后递增运算符将应用于指针变量C.在此print语句之后,指针c将指向下一个字符'e'。