在c++中读取文件时,它如何自动将字符放入字符数组,将数字放入整数变量
While reading a file in c++, how does it automatically puts char in character array and numbers in integer variable?
#include <fstream>
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
class akh {
public:
char name[20];
int age;
};
int main() {
akh ak;
cout << "Size of ak:" << sizeof(ak) << endl;
fstream fout("abc.dat", ios::binary | ios::out);
cout << "nEnter your name: ";
cin.getline(ak.name, 20);
cout << "nEnter your age: ";
cin >> ak.age;
fout.write((char*) &ak, sizeof(ak));
fout.close();
fstream fin("abc.dat", ios::in | ios::binary);
fin.read((char*)&ak, sizeof(ak)); // automatically puts name in ak.name and age in ak.age ? How is this happening?
cout << "nName: " << ak.name;
cout << "nAge: " << ak.age;
fin.close();
return 0;
}
- 这是怎么发生的?此外,如果我在文本文件中有"myName19",并且开始读取,然后它自动将myName放在char中,将19放在integer变量
- 关闭文件后,tellg指针自动移动到文件
- 除了((char*(&x、 sizeof(x((
- 这是怎么发生的
您正在按原样将类akh
的完整内存布局写入二进制文件。
因此,如果您以相同的方式以相同的字节数读回它,则ak
实例中的内存布局将相同。
- 关闭文件后,tellg指针是否自动移动到文件的开头
不,在调用close()
之后,不再维护tellg
指针。
对于输入,您正在打开一个新的fstream
实例fin
,它从文件的开头开始读取。
- 除了((char*(&x、 sizeof(x((
对于二进制文件编号。如前所述,您希望写入和读取它们在内存中的确切字节数。
如果希望在文本文件中具有可读字符,请使用格式化文本运算符<<
进行输出,>>
进行输入。
当我运行您的代码时,您的问题就变得很清楚了。您正在使用的std::getline()
变体从ak.name
:的输入中正好取20个字符
cin.getline(ak.name, 20);
你可以通过用替换上面的行来解决这个问题
cin >> ak.name;
并在输入时在姓名和年龄之间留出一个空格。
这里有一个解决方案,其中一切都按预期工作,并显示二进制文件的内存布局。
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- 字符数组中的元素数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 使用字符数组作为 Map 中的键
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 按顺序声明的字符数组重叠
- 在 C++ 中字符串的大小与字符数组的大小
- 寻找一种更好的方法来表示无符号字符数组
- 如何打印 2D 字符数组C++
- 从字符数组的元素中减去'a'是什么意思
- 我是否不正确地集中了这些字符数组?