4

我在这里期待h。但它显示g。为什么?

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

3 回答 3

9

You are attempting to modify a string literal, which is undefined behaviour. This means that nothing definite can be said about what your program will print out, or indeed whether it will print anything out.

Try:

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

For further discussion, see the 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。在此打印语句之后,指针 c 将指向下一个字符“e”。

于 2012-11-08T09:05:30.227 回答