在C编程中,%d会随机生成数字吗?

时间:2017-08-27 16:15:29

标签: c gcc command-line

我正在学习C编程(我是新手),我正在尝试各种各样的事情以了解事情的运作方式。所以,我很清楚以下代码不是正确的代码;但我仍然试着去理解它是如何编译的:

tobits = lambda x: "".join(map(lambda y:'00000000'[len(bin(ord(y))[2:]):]+bin(ord(y))[2:],x))
frombits = lambda x: ''.join([chr(int(str(y), 2)) for y in [x[y:y+8] for y in range(0,len(x),8)]])

我在命令行中得到了这个:

I think C will give me 20 8 108 108 2.
Process returned 0 (0x0)   execution time : 0.234 s
Press any key to continue.

从数字8,108,108和2开始?它们是如何产生的?

我只是想了解它是如何工作的。感谢。

1 个答案:

答案 0 :(得分:1)

因为它是未定义的行为。

没有随机参与,只是printf()试图为每个"%d"找到相应的参数,并且它访问不指向任何参数的内存,因此它会打印它在那里找到的任何内容

但严格来说,这是未定义的行为。如果格式说明符多于参数,则标准不指定行为。

所以传递单个int变量,当函数期望为5时将导致未定义的行为,而在 practice 中,则无法预测将要发生的事情。