This topic has been archived. It cannot be replied.
-
工作学习 / IT技术讨论 / 下面的C++代码有什么不妥?int read(int *ip)
{
scanf("%d", ip);
return *ip;
}
...
insert(&A[i], read(&B), read(&C));
-collapsar(笨笨和旦旦);
2004-6-3
{109}
(#1748935@0)
-
Shold it return a int& instead of a int?
-firsttry(firsttry);
2004-6-3
(#1749041@0)
-
No idea, I got this sample from <<The practice of programming>>. Anyway, shouldn't have anything to do with int&, but with scanf, I guess.
-collapsar(笨笨和旦旦);
2004-6-3
(#1749046@0)
-
have you copied the whole question?
-firsttry(firsttry);
2004-6-3
(#1749059@0)
-
Yes.
-collapsar(笨笨和旦旦);
2004-6-3
(#1749065@0)
-
我看到两个问题,1、B和C输入的顺序无法确定。随不同的平台、Compiler、甚至Compiler Version而不同;2、scanf不安全,输入如果不是整数可能会overwrite到其他内存单元。
-canadiantire(水坛轮胎);
2004-6-3
(#1749082@0)
-
还有,这是一段典型C的code,如果你说C++,我想我因该看到<<才对。3、这个read()是不安全的,A[]如果不是int array,即使输入正确也会出问题。4、read是系统调用。compile这段code会报错。
-canadiantire(水坛轮胎);
2004-6-3
(#1749103@0)
-
说得很不错,我想原书的意图应该是说overflow攻击的可怕性。至于B和C的顺序我倒没想到,可能不同的编译器结果倒是可能不同的。
-collapsar(笨笨和旦旦);
2004-6-3
(#1749184@0)
-
这些天一直在想C++,所以C和C++我老混着用了。sry.
-collapsar(笨笨和旦旦);
2004-6-3
(#1749187@0)
-
you have nothing to sry for. :)
-canadiantire(水坛轮胎);
2004-6-3
(#1749191@0)
-
现在我才明白你的主对你真的是很照顾
-wooha(wowo);
2004-6-3
(#1749320@0)
-
:)
-collapsar(笨笨和旦旦);
2004-6-3
(#1749484@0)
-
在read()里应该检查指针ip是不是null
-thinkpad(无聊者);
2004-6-5
(#1752618@0)
-
是,但并不是考点。
-collapsar(笨笨和旦旦);
2004-6-12
(#1761404@0)