printf("%d")?
c语言printf("%d");vc下不会报错,但结果是2433316,而且每次都是,说明不是随机数,那究竟为什么每次都是2433316呢windows下每次编译后都一样...
c语言printf("%d");
vc下不会报错,但结果是2433316,而且每次都是,说明不是随机数,那究竟为什么每次都是2433316呢
windows下每次编译后都一样,不过在linux下每次都不一样,很奇怪 展开
vc下不会报错,但结果是2433316,而且每次都是,说明不是随机数,那究竟为什么每次都是2433316呢
windows下每次编译后都一样,不过在linux下每次都不一样,很奇怪 展开
2个回答
展开全部
对于同一个EXE文件,可能每次都相同,但是只要你重新编译一下,生成一个新的EXE文件,可能结果就不是2433316了。
这属于典型了参数不够的情况,因为C语言的堆栈是调用者维护,所以printf函数的参数太多、太少都不报错,程序编译为汇编代码时候,是主程序完成一系列的参数入栈(PUSH),然后进行一个CALL,子程序里面使用参数都是一系列的[BP+N]来实现的,当参数不符合预期的时候,[BP+N]还是能取到一个内存中的数据,只是位置和内容都不是我们所意料的,而且在WIN32平台的保护模式下,甚至这样会造成内存访问出错。
这属于典型了参数不够的情况,因为C语言的堆栈是调用者维护,所以printf函数的参数太多、太少都不报错,程序编译为汇编代码时候,是主程序完成一系列的参数入栈(PUSH),然后进行一个CALL,子程序里面使用参数都是一系列的[BP+N]来实现的,当参数不符合预期的时候,[BP+N]还是能取到一个内存中的数据,只是位置和内容都不是我们所意料的,而且在WIN32平台的保护模式下,甚至这样会造成内存访问出错。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询