cout比printf安全?

ocean1004 2008-03-06 09:57:59

#include<stdio.h>
#include<iostream>
using namespace std;
char *str(){
return NULL;
}
int main(){
printf("%s\n",str());
cout<<str()<<endl;
}


cout<<(char)str()<<endl;

这个也是可以的

为什么?
printf输出有什么控制?cout又有什么控制?
...全文
167 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ocean1004 2008-03-07
  • 打赏
  • 举报
回复
攻击?
这么严重?
为什么cout会出错而printf不会?有人知道其中的原因吗?
orc1984 2008-03-06
  • 打赏
  • 举报
回复
不可以说谁更安全
MagiSu 2008-03-06
  • 打赏
  • 举报
回复
cout基于模板机制,属于编译期检查
而printf基于运行时,属于运行时检查,而且valist的类型还不能判定。
iambic 2008-03-06
  • 打赏
  • 举报
回复
cout有类型检查。
hai040 2008-03-06
  • 打赏
  • 举报
回复
cout的好处是不用记太多符号,像
%s%d之类的,打错了查起来也是相当麻烦
类似的还有stringstream和sprintf,这个可能用得更多
Chappell 2008-03-06
  • 打赏
  • 举报
回复
cout号称是类型安全的,总的来说,应该是相对来说较为灵活
cout<<(char*)0;//便会崩溃
  • 打赏
  • 举报
回复
呃 要让他崩溃还是很容易的了
再安全的方法也能有办法让他崩溃的。
唐巧 2008-03-06
  • 打赏
  • 举报
回复
cout比printf安全是因为cout根据类型输出,printf则不管类型.
而且printf由于是变参的方式传递参数,也不方便做参数个数的检查。不安全的编程很容易被攻击。
hityct1 2008-03-06
  • 打赏
  • 举报
回复
printf容易造成溢出漏洞,被黑客利用。
iambic 2008-03-06
  • 打赏
  • 举报
回复
>不可以说谁更安全
为什么?
野男孩 2008-03-06
  • 打赏
  • 举报
回复
cout比printf安全是因为cout根据类型输出,printf则不管类型。

比如下面的代码:

int a = 10;
char b = 'b';
char c[10] = "c[10]";

cout<<aa<<b<<c; //编译通过,结果正确

printf("%d %c %s", aa, b, c); //编译通过,结果正确。

printf("%s %s %s", aa, b, c); //编译通过,结果。。。。。。
//关键在于printf不会检查%s对应的那个变量是不是一个正确的地址,
//也没办法检查
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-06 09:57
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下