免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1487 | 回复: 10
打印 上一主题 下一主题

欢迎大家讨论(一个奇怪的问题) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-22 10:11 |只看该作者 |倒序浏览
#include<stdio.h>;
void main()
{
        int i = 0, num;
        printf("%.200d, %n", i, &num);
        printf("\n";
        printf("%d",num);
}

请问程序输出的是?

论坛徽章:
0
2 [报告]
发表于 2004-10-22 10:47 |只看该作者

欢迎大家讨论(一个奇怪的问题)

202,
这不是什么奇怪的问题,只是你不明白%n的意思。
你随便找一本书,翻一下就明白了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-10-22 10:48 |只看该作者

欢迎大家讨论(一个奇怪的问题)

怎么了?没有问题啊。%n是什么参数啊?

论坛徽章:
0
4 [报告]
发表于 2004-10-22 10:54 |只看该作者

欢迎大家讨论(一个奇怪的问题)

我都说了,你随便翻一本书就可以了。
这种弱智的问题就不用问了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-10-22 11:15 |只看该作者

欢迎大家讨论(一个奇怪的问题)

^_^,是有点了。不过,偶随便翻了一本了。没有介绍。也试了好一会了。man上面没介绍参数。info上面说是:file name。还是不明白。
烦请指点在哪本书上有介绍啊。偶实在不会用这个参数了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-10-22 11:40 |只看该作者

欢迎大家讨论(一个奇怪的问题)

哈哈,终于明白了。
找到,看了linux的源码才明白怎么回事。
就是printf中的那个字串中n的地方是第几个就传回给num什么样的值。
所以就打出了202。因为有一个逗号和一个空格。厚厚~~
从此告别弱智,厚厚~~

论坛徽章:
0
7 [报告]
发表于 2004-10-22 12:51 |只看该作者

欢迎大家讨论(一个奇怪的问题)

原帖由 "aero" 发表:
哈哈,终于明白了。
找到,看了linux的源码才明白怎么回事。
就是printf中的那个字串中n的地方是第几个就传回给num什么样的值。
所以就打出了202。因为有一个逗号和一个空格。厚厚~~
从此告别弱智,厚厚~~



格式符%n, 把至此已读入 or 输出的字符总数送给%n对应的变量

论坛徽章:
0
8 [报告]
发表于 2004-10-22 14:10 |只看该作者

欢迎大家讨论(一个奇怪的问题)

不建议采用printf("%.200d, %n", i, &num)这样的用法,而主张使用num=printf("%.200d, ", i)。

论坛徽章:
0
9 [报告]
发表于 2004-10-23 00:19 |只看该作者

欢迎大家讨论(一个奇怪的问题)

本人只是要大家参于讨论并不是说这个问题单间;
请大家继续讨论这种用法可能造成的后果 .希望能从中获益.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-10-23 08:26 |只看该作者

欢迎大家讨论(一个奇怪的问题)

这是一个有名的格式化串漏洞,可以利用%n参数写入程序的跳转地址。
注明的wu-ftp就有这样的漏洞。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP