2楼的解释是正确的。123456在这里所起的作用,就是那个缓冲区的字符串,scanf()函数根据格式字符串指示,按照"2d"取出2个字符(即"12")转换为整数12放入x的地址中作为x的值,再根据紧接着的"2ld"取出紧接的2个字符(即"34")转换为长整型数34L放入y的地址中作为y的值,则x+y的计算结果自然是12+34=46。
注意:剩下的"56"作为残余数据留在键盘缓冲区中,如果有下一个scanf()函数调用,就会将残余数据读入,此时不用你敲键盘,scanf()已经收下数据了。这就是为保险起见,使用scanf()前先清空键盘缓冲区的原因。不过,这仅仅是治理scanf()诸多后患的措施之一,事实上,用这个函数的错误,防不胜防。