关于ofstream 中的write函数

雷神风暴烈酒 2013-02-22 03:11:28
为何write函数的第1个参数 必须是char*

是不是因为char占1个字节,方便write写入任何类型的数据
...全文
1050 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2013-02-23
  • 打赏
  • 举报
回复
定义缓冲区的方法就两种: 1:缓冲区头部+长度 2: 缓冲区头部+尾部 这里用了第一种。 为啥不用泛型void*?因为void*只能存取地址,不支持其他指针操作(比如,解引用,偏移,相减等)
bruceteen 2013-02-23
  • 打赏
  • 举报
回复
同意4楼和7楼,我也一直认为const char*属于设计错误,应当为const void*
b495393584 2013-02-23
  • 打赏
  • 举报
回复
多补补指针。。。版主正解
雷神风暴烈酒 2013-02-23
  • 打赏
  • 举报
回复
引用 13 楼 mujiok2003 的回复:
定义缓冲区的方法就两种: 1:缓冲区头部+长度 2: 缓冲区头部+尾部 这里用了第一种。 为啥不用泛型void*?因为void*只能存取地址,不支持其他指针操作(比如,解引用,偏移,相减等)
话说在GNU标准中 缺省情况下 把VOID* 和CHAR* 看成一样的,可以进行算术运算
雷神风暴烈酒 2013-02-23
  • 打赏
  • 举报
回复
引用 13 楼 mujiok2003 的回复:
定义缓冲区的方法就两种: 1:缓冲区头部+长度 2: 缓冲区头部+尾部 这里用了第一种。 为啥不用泛型void*?因为void*只能存取地址,不支持其他指针操作(比如,解引用,偏移,相减等)
有理!
雷神风暴烈酒 2013-02-23
  • 打赏
  • 举报
回复
引用 11 楼 b495393584 的回复:
多补补指针。。。版主正解
请看完帖子 再表发意见
ForestDB 2013-02-22
  • 打赏
  • 举报
回复
char就是byte。
雷神风暴烈酒 2013-02-22
  • 打赏
  • 举报
回复
请大牛 各抒己见!
FingerStyle 2013-02-22
  • 打赏
  • 举报
回复
是啊 最小单位。 用char*就可以写最小一个byte。 如果换成别的 1byte就写不了了。
雷神风暴烈酒 2013-02-22
  • 打赏
  • 举报
回复
引用 6 楼 qq120848369 的回复:
传的是内存的地址, 不是内存的值
请版主说清楚点。。
sduxiaoxiang 2013-02-22
  • 打赏
  • 举报
回复
开始写的地址
dubiousway 2013-02-22
  • 打赏
  • 举报
回复
是啊 这个函数是继承于 ostream的。写块数据用,不是针对字符串。 所以即便数据中有'\0'字符,也都一样被复制到目标区。
rocktyt 2013-02-22
  • 打赏
  • 举报
回复
个人表示同意4楼的观点 可以将read和write的传入地址类型void*,只需要read/write内部实现里加上类型转换即可,不会有什么影响,程序员也不再需要每次调用read/write时都得先进行指针类型转换
qq120848369 2013-02-22
  • 打赏
  • 举报
回复
传的是内存的地址, 不是内存的值
dubiousway 2013-02-22
  • 打赏
  • 举报
回复
对,一样。 不过,如果前面是 void*,后面的length,要看它是以什么为单位的。
雷神风暴烈酒 2013-02-22
  • 打赏
  • 举报
回复
引用 1 楼 dubiousway 的回复:
是啊 这个函数是继承于 ostream的。写块数据用,不是针对字符串。 所以即便数据中有'\0'字符,也都一样被复制到目标区。
引用 3 楼 classpatterns 的回复:
是啊 最小单位。 用char*就可以写最小一个byte。 如果换成别的 1byte就写不了了。
那么如果这个参数 是void* 呢? 好像一样可以达到 写任意数据的目的

65,187

社区成员

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

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