关于ofstream 中的write函数

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

是不是因为char占1个字节,方便write写入任何类型的数据
...全文
686 16 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mujiok2003 2013-02-23
定义缓冲区的方法就两种: 1:缓冲区头部+长度 2: 缓冲区头部+尾部 这里用了第一种。 为啥不用泛型void*?因为void*只能存取地址,不支持其他指针操作(比如,解引用,偏移,相减等)
  • 打赏
  • 举报
回复
bruceteen 2013-02-23
同意4楼和7楼,我也一直认为const char*属于设计错误,应当为const void*
  • 打赏
  • 举报
回复
b495393584 2013-02-23
多补补指针。。。版主正解
  • 打赏
  • 举报
回复
引用 13 楼 mujiok2003 的回复:
定义缓冲区的方法就两种: 1:缓冲区头部+长度 2: 缓冲区头部+尾部 这里用了第一种。 为啥不用泛型void*?因为void*只能存取地址,不支持其他指针操作(比如,解引用,偏移,相减等)
话说在GNU标准中 缺省情况下 把VOID* 和CHAR* 看成一样的,可以进行算术运算
  • 打赏
  • 举报
回复
引用 13 楼 mujiok2003 的回复:
定义缓冲区的方法就两种: 1:缓冲区头部+长度 2: 缓冲区头部+尾部 这里用了第一种。 为啥不用泛型void*?因为void*只能存取地址,不支持其他指针操作(比如,解引用,偏移,相减等)
有理!
  • 打赏
  • 举报
回复
引用 11 楼 b495393584 的回复:
多补补指针。。。版主正解
请看完帖子 再表发意见
  • 打赏
  • 举报
回复
ForestDB 2013-02-22
char就是byte。
  • 打赏
  • 举报
回复
请大牛 各抒己见!
  • 打赏
  • 举报
回复
FingerStyle 2013-02-22
是啊 最小单位。 用char*就可以写最小一个byte。 如果换成别的 1byte就写不了了。
  • 打赏
  • 举报
回复
引用 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,要看它是以什么为单位的。
  • 打赏
  • 举报
回复
引用 1 楼 dubiousway 的回复:
是啊 这个函数是继承于 ostream的。写块数据用,不是针对字符串。 所以即便数据中有'\0'字符,也都一样被复制到目标区。
引用 3 楼 classpatterns 的回复:
是啊 最小单位。 用char*就可以写最小一个byte。 如果换成别的 1byte就写不了了。
那么如果这个参数 是void* 呢? 好像一样可以达到 写任意数据的目的
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.1w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
申请成为版主
帖子事件
创建了帖子
2013-02-22 03:11
社区公告
暂无公告