Closed. This question needs details or clarity. It is not currently accepting answers. Learn more。
想改进这个问题吗添加细节并通过editing this post澄清问题。
去年关门了。
我发现一个问题要求输出以下语句:
给出的答案是
我的第一个问题是:为什么
我还运行了以下语句
它什么也没印代码运行但没有错误。
我的第二个问题是:为什么编译的代码没有错误?
第三次,我做了以下事情:
输出
所以我真的很困惑如果+1打印
现在我们知道:
想改进这个问题吗添加细节并通过editing this post澄清问题。
去年关门了。
我发现一个问题要求输出以下语句:
printf("%d"+1,123);
给出的答案是
d
,它的解释是:因为"%d"
是一个字符串,+1这里的意思是d
。123
只是被忽略了。我的第一个问题是:为什么
123
会被忽略?我还运行了以下语句
printf("%d"+2,123);
它什么也没印代码运行但没有错误。
我的第二个问题是:为什么编译的代码没有错误?
第三次,我做了以下事情:
printf("%d"+0,123);
输出
123
。所以我真的很困惑如果+1打印
d
,那么+0不应该打印%
? 最佳答案
想象一下斯特林:
char str[] = "%d";
现在我们知道:
str[0] == '%'
str[1] == 'd'
str[2] == '\0' = 0x00
str+2 == &str[2] == the address of the byte 0x00 inside the str string == ""
printf("%d", 123); is the same as printf(str, 123)
printf("%d" + 2, 123); if the same as printf("", 123); and it will print "", ie. nothing
关于c - 不了解printf()的怪异行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52126001/
10-14 09:56