我正在学习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开始?它们是如何产生的?
我只是想了解它是如何工作的。感谢。
答案 0 :(得分:1)
因为它是未定义的行为。
没有随机参与,只是printf()
试图为每个"%d"
找到相应的参数,并且它访问不指向任何参数的内存,因此它会打印它在那里找到的任何内容
但严格来说,这是未定义的行为。如果格式说明符多于参数,则标准不指定行为。
所以传递单个int
变量,当函数期望为5时将导致未定义的行为,而在 practice 中,则无法预测将要发生的事情。