Q&A:为什么scanf的可变参数列表是输入项地址表?
若忘记加上取地址符(间接寻址符)(&),由于scanf不会检查传入可变参数的内容是否是合法,仍然将传入的内容当做正确的地址处理,由于与变量先前的值相等值的地址是不可预测的(可能是其他程序申请的内存,或为操作系统核心部分内存),会造成地址的非法访问(访问了未经申请的内存),这样操作会触发操作系统内存保护机制,被操作系统认为是具有危害性的行为,操作系统会强行终止程序以确保系统正常运行(Runtime Error)。因此下次读入时必须手动清除缓冲区中该项内容(getchar()或fflush(stdin))。
原创
2024-02-17 18:26:37 ·
239 阅读 ·
0 评论