当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 书本上奇怪的程序
帖子发表于 : 2008-06-30 20:40 

注册: 2007-05-11 19:48
帖子: 36
地址: 湖北襄樊
送出感谢: 0 次
接收感谢: 0 次
书上列出一个程序:
/*ex02-05.c*/
#include<stdio.h>
#include<string.h>
int main(void)
{
char buffer[256];

printf("Enter your name and press<Enter>:\n");
gets(buffer);

printf("\nYour name has %d characters and spaces!",
strlen(buffer));

return 0;
}
但是我用gcc编译此程序时gcc出现:
wangxuyuan@wangxuyuan-laptop:~$ gcc 2.6.5.c -o 1111
/tmp/ccFt2gvY.o: In function `main':
2.6.5.c:(.text+0x35): warning: the `gets' function is dangerous and should not be used.
wangxuyuan@wangxuyuan-laptop:~$ gcc 1111.c -o 11111
/tmp/cchUaoXK.o: In function `main':
1111.c:(.text+0x35): warning: the `gets' function is dangerous and should not be used.
wangxuyuan@wangxuyuan-laptop:~$ gcc 1111.c -o 11111
/tmp/cciQnJim.o: In function `main':
1111.c:(.text+0x35): warning: the `gets' function is dangerous and should not be used.
wangxuyuan@wangxuyuan-laptop:~$ gcc 1111.c -o 11111
/tmp/ccH34uXW.o: In function `main':
1111.c:(.text+0x35): warning: the `gets' function is dangerous and should not be used.
wangxuyuan@wangxuyuan-laptop:~$ gcc 1111.c -o 11111
/tmp/ccOtLpDD.o: In function `main':
1111.c:(.text+0x35): warning: the `gets' function is dangerous and should not be used.
wangxuyuan@wangxuyuan-laptop:~$
每回编译时提示是不一样的,在此程序是没有经过改变的!
这是怎么回事阿?????能给解释一下么?


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-06-30 20:53 
头像

注册: 2008-06-08 13:31
帖子: 361
地址: 福州
送出感谢: 0 次
接收感谢: 1
/tmp/*.o 都是临时文件,本身就是随机生成的文件名


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-06-30 22:27 
头像

注册: 2007-06-30 0:27
帖子: 509
送出感谢: 0 次
接收感谢: 1
只是个警告而而已,程序是可以正确运行的。这里有说明:http://bytes.com/forum/thread710231.html


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-07-02 1:42 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
http://wiki.ubuntu.org.cn/index.php?tit ... iant=zh-cn

代码:
man gets


引用:
GETS(3) Linux Programmer’s Manual GETS(3)
...
Never use gets(). Because it is impossible to tell without knowing the data in advance how many charac‐
ters gets() will read, and because gets() will continue to store characters past the end of the buffer,
it is extremely dangerous to use. It has been used to break computer security. Use fgets() instead.
...


1991 年,一个骇客利用 gets 溢出编写了一个蠕虫,曾轰动一时。

应使用 fgets 代替 gets
代码:
...
//       char *fgets(char *s, int size, FILE *stream);
fgets(buffer, 256, stdin);
...


_________________
http://lee.youxu.info/


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译