关于字符串到文件的问题

时间:2010-07-28 20:45:19

标签: c++

这是代码

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

int main()
{
  ofstream out("test", ios::out | ios::binary);

  if(!out) {
    cout << "Cannot open output file.\n";
    return 1;
  }

  double num = 100.45;
  char str[] = "www.java2s.com";

  out.write((char *) &num, sizeof(double));
  out.write(str, strlen(str));

  out.close();

  return 0;
}

我不理解这个

out.write((char *) &num, sizeof(double));

为什么我们需要(char *)&num?sizeof(double)?

2 个答案:

答案 0 :(得分:3)

write有两个参数,char*和长度。

&num实际上是double*。这是我们想要的值,但它是错误的类型,编译器会抱怨。 (char*)告诉编译器将其视为char*。基本上,它对编译器说“关闭。我知道我在做什么”。

sizeof(double)是双字符的大小。 (通常,这是8)。

他们一起说要从&amp; num给出的地址开始写8个字节。 (或换句话说,写出构成num的字节)

答案 1 :(得分:1)

您需要它们,因为您正在访问构成double的组件字节。 write预计会收到char *,因此您将地址转换为char *。因为它不知道正在写入的对象的类型(使用正确的强制转换,write将接受几乎任何东西的指针),所以你需要告诉它要写入要写入的对象的字节数。 / p>