返回信息流man文档中定义了fopen返回FILE指针,可是我也经常看到这种写法:
int fd = fopen(filename, "a+");
而且这种写法也是可以正常工作的,有点纳闷,虽然指针就是整型,可是这样不会引起隐患吗?为什么有那么多的程序这样写?
这是一条镜像帖。来源:北邮人论坛 / cpp / #19386同步于 2009/2/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
C 语言的fopen的返回值问题
traffy
2009/2/22镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
"文件指针"不是指针
【 在 traffy (老大他砍我) 的大作中提到: 】
: man文档中定义了fopen返回FILE指针,可是我也经常看到这种写法:
: int fd = fopen(filename, "a+");
: 而且这种写法也是可以正常工作的,有点纳闷,虽然指针就是整型,可是这样不会引起隐患吗?为什么有那么多的程序这样写?
: ...................
你要是用gcc的话开-Wall,应该会报警的。
或者把这段代码挪到64位的环境上应该就出错了。
这里我认为是利用了int默认是32bit,而32位系统上指针长度也是32bit,这样写肯定是不好的,虽然在32位系统上没问题。
【 在 traffy (老大他砍我) 的大作中提到: 】
: man文档中定义了fopen返回FILE指针,可是我也经常看到这种写法:
: int fd = fopen(filename, "a+");
: 而且这种写法也是可以正常工作的,有点纳闷,虽然指针就是整型,可是这样不会引起隐患吗?为什么有那么多的程序这样写?
: ...................
VS2005上,默认的编译配置下报错了:
cannot convert from 'FILE *' to 'int'
【 在 traffy 的大作中提到: 】
: man文档中定义了fopen返回FILE指针,可是我也经常看到这种写法:
: int fd = fopen(filename, "a+");
: 而且这种写法也是可以正常工作的,有点纳闷,虽然指针就是整型,可是这样不会引起隐患吗?为什么有那么多的程序这样写?
奥,那就证明这样写是不规范的,谢谢哈
【 在 SDI 的大作中提到: 】
: 你要是用gcc的话开-Wall,应该会报警的。
: 或者把这段代码挪到64位的环境上应该就出错了。
: 这里我认为是利用了int默认是32bit,而32位系统上指针长度也是32bit,这样写肯定是不好的,虽然在32位系统上没问题。
沙发正解,fd是文件描述符的缩写,所以open返回的是文件描述符,fopen是文件指针,
一个是系统调用,一个是库函数,别搞混了
【 在 traffy (老大他砍我) 的大作中提到: 】
: man文档中定义了fopen返回FILE指针,可是我也经常看到这种写法:
: int fd = fopen(filename, "a+");
: 而且这种写法也是可以正常工作的,有点纳闷,虽然指针就是整型,可是这样不会引起隐患吗?为什么有那么多的程序这样写?
: ...................
【 在 PtwCJ 的大作中提到: 】
: 沙发正解,fd是文件描述符的缩写,所以open返回的是文件描述符,fopen是文件指针,
: 一个是系统调用,一个是库函数,别搞混了
niubility