"a+" "a" app|out之间的关系?

whoho 2007-02-27 11:35:16
今天注意到一个问题,就是关于以“添加”方式打开文件的实际效果:

[[[[以下一律不考虑二进制文件!!!但可以推而广之]]]]



在C++标准中,合法的添加模式只有一种:
ios_base::app|ios_base::out
遵守标准的编译器(库)应当让试图通过其它含有app的文件打开方式组合
都open失败


而C标准中,则有两种添加模式,C99作如下陈述:
"a": append; open or create text file for writing at end-of-file
"a+": append; open or create text file for update, writing at end-of-file
同样,如果一个open 模式串中含有除此之外的添加模式,也将引起打开失败

但是,对于这两个陈述的区别,我有些糊涂了,实际写程序验证也没有发现任何差别,那么实际上这a和a+是否是一样的呢?


在C++标准文本中,明确说明ios_base::app|ios_base::out与"a"是等价的,但没有与"a+"等价的东西,这是否说明a与a+也是同样的意思呢?

不知道各位谁注意到了这些,还请指教
...全文
212 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
whoho 2007-02-28
  • 打赏
  • 举报
回复
楼上的,如果按照C99的描述,无论a还是a+貌似都不能读罢?
Dic4000 2007-02-28
  • 打赏
  • 举报
回复
我认为在C中,a是追加(不能读,只能向文件尾增加数据),a++是可以对文件读写
taodm 2007-02-28
  • 打赏
  • 举报
回复
没有。不知道。《标准C++输入输出流与本地化》就写了“没有”2字。
whoho 2007-02-28
  • 打赏
  • 举报
回复
那么再问一下各位,

C++标准中没有与a+对应的等价物,这是出于什么考虑呢?

欢迎畅所欲言
whoho 2007-02-28
  • 打赏
  • 举报
回复
看来确实是这样,谢谢
taodm 2007-02-28
  • 打赏
  • 举报
回复
2个描述不一样,a+多了一个update
你应该再下翻几行:
When a file is opened with update mode ('+' as the second or third character in the
above list of mode argument values), both input and output may be performed on the
associated stream.
whoho 2007-02-27
  • 打赏
  • 举报
回复
我发现很多编译器都不排除 标准定义的那些合法的之外的文件打开模式
比如ios::in | ios::app,根据C++标准的陈述,这是非法的,必须让open失败
但是偏偏有些标准库的实现允许类似的组合

当然这是后话

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧