额外减小 发表于 2023-1-9 23:23:14

哈哈,突然发现很严重的问题

以前写scanf()函数的时候经常忘记写取址符号
像这样...
int a;
scanf("%d",a);
...
我在想,这样写会导致什么行为呢?
虽然这个 a 呢,他是一个整型变量,但他有没有可能会被读作一个指针,从而改变这个内存
这样不就完了吗?

但是我以前试过好几次都没有发现问题,应该不是我想的那样吧。那么应该是什么样呢~

(这是一个萌新的主观臆想)
(大佬勿喷{:10_277:} )

wp231957 发表于 2023-1-10 08:57:15

大多数情况下就只是无法取到正确数据
或许有少数情况也会出现崩溃现象

jackz007 发表于 2023-1-10 10:12:31

本帖最后由 jackz007 于 2023-1-10 10:15 编辑

      这样写的结果,a 确实会被当做一个指针,会尝试把从键盘读到的数据(4个字节)写入 a 值所指向的存储单元,但是,每台电脑可供使用的内存地址是有一个数值范围的,如果 a 值恰好在这个数值范围内,那么,函数可以被正常执行,只是其它变量会被侵害,而且,变量 a 也无法如预期那样取到键盘输入数值;如果 a 值不在可用内存地址范围以内,那么,调用 scanf() 函数,程序会因为访问无效内存地址而崩溃。
页: [1]
查看完整版本: 哈哈,突然发现很严重的问题