【发布时间】:2019-03-11 14:33:55
【问题描述】:
我正在尝试在二进制文件中写入和读取字符串,但我不明白为什么 sizeof(t) 返回 4。
//write to file
ofstream f1("example.bin", ios::binary | ios::out);
string s = "Valentin";
char* t = new char[s.length()+1];
strcpy(t, s.c_str());
cout << s.length()+1 << " " << sizeof(t) << endl; // prints 9 4
for(int i = 0; i < sizeof(t); i++)
{
//t[i] += 100;
}
f1.write(t, sizeof(t));
f1.close();
// read from file
ifstream f2("example.bin", ios::binary | ios::in);
while(f2)
{
int8_t x;
f2.read((char*)&x, 1);
//x -= 100;
cout << x; //print Valee
}
cout << endl;
f2.close();
我在 char* 数组 t 中放入什么大小并不重要,代码总是打印“4”作为它的大小。要写入超过 4 个字节的数据,我必须做什么?
【问题讨论】:
-
sizeof(t)只是给你一个指针的大小,因为这就是t的大小。如果您想要为t分配的内存大小,为什么不改为s.length()+1? -
为什么所有这些有氧运动都带有
char *的字符串?字符串有一个data(),这可能就是你所需要的 -
sizeof 运算符返回 type 的静态大小。它在编译时变成一个常数(无论如何,在 C++ 中,在 C 中有 VLA)。 32 位二进制文件的指针大小通常为 4,64 位二进制文件的指针大小通常为 8。
-
sizeof(t)->strlen(t)。但请考虑第二条评论。