游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2988|回复: 17

小测试~

[复制链接]

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2004-10-7 13:33:00 | 显示全部楼层 |阅读模式
我们定义了一个字符串char* ptr
ptr的内容抽象一下,不确定。但是ptr!=NULL

假设你现在想把ptr的内容打到屏幕上,你会:
A.     printf(ptr);
B.     printf("%s",ptr);

C代码,以上你会选择哪个?请说出理由。

21

主题

170

帖子

170

积分

注册会员

Rank: 2

积分
170
QQ
发表于 2004-10-7 14:25:00 | 显示全部楼层

Re:小测试~

什么叫抽象一下?

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
 楼主| 发表于 2004-10-7 14:29:00 | 显示全部楼层

Re:小测试~

……
就把PTR当成任意一个字符串吧……

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2004-10-7 14:34:00 | 显示全部楼层

Re:小测试~

B 打印字符串

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2004-10-7 14:38:00 | 显示全部楼层

Re:小测试~

懒的想了,给答案吧

21

主题

170

帖子

170

积分

注册会员

Rank: 2

积分
170
QQ
发表于 2004-10-7 14:38:00 | 显示全部楼层

Re:小测试~

AB不一样吗?

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
 楼主| 发表于 2004-10-7 14:40:00 | 显示全部楼层

Re:小测试~

答案是B。
因为对A来说,如果ptr是"%s"这类东西的话,可能会造成缓冲区溢出等……我实验过了,打印出了乱码……

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
 楼主| 发表于 2004-10-7 14:40:00 | 显示全部楼层

Re:小测试~

如果构造一个合适的字符串的话……
网络安全啊!

21

主题

170

帖子

170

积分

注册会员

Rank: 2

积分
170
QQ
发表于 2004-10-7 14:48:00 | 显示全部楼层

Re:小测试~

printf(char*,...)的第一个参数参数就是char*,A把PTR传给了第一参数.
除了安全问题,他们结果也不完全等价.
例如:        char* p="asdf,%s";
        char* t="jklm";
        printf(p,t);
可以输出asdf,jklm.

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
 楼主| 发表于 2004-10-7 14:55:00 | 显示全部楼层

Re:小测试~

本贴主要是讨论安全问题……
而且楼上同志把题目看错了……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-22 15:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表