C++ 用fstream读取二进制文件

C++ 用fstream读取二进制文件,c++,arrays,binary,char,fstream,C++,Arrays,Binary,Char,Fstream,我正在使用fstream读取二进制文件,并将信息存储在字符数组中: int dataLength = 32; int counter = 0; char data[dataLength]; char PMTone[dataLength/4]; std::fstream *fs = new std::fstream(inputFileName,std::ios::in|std::ios::binary); fs->read((char *)&data, dataLength); //

我正在使用fstream读取二进制文件,并将信息存储在字符数组中:

int dataLength = 32;
int counter = 0;
char data[dataLength];
char PMTone[dataLength/4];
std::fstream *fs = new std::fstream(inputFileName,std::ios::in|std::ios::binary);
fs->read((char *)&data, dataLength);
//of the 32 characters in data[], I need first, 5th etc elements:
//fill first pmt info
for(int i=0; i<(dataLength/4); i++){
PMTone[i]=data[counter];
counter+=4;
}
我得到一个错误:

mdfTree.cpp:92:21:错误:从“const char*”到的转换无效 “char”[-fpermissive]

我不明白为什么PMTone[]中的元素是指向字符的指针,而PMTone[]被定义为字符数组

当我将PMTone[]视为指向字符的指针数组时:

(*PMTone)[7] = "a";
我收到另一个我不理解的错误:

mdfTree.cpp:91:18:错误:数组的类型“char[int]”无效 下标

这似乎意味着编译器根本不认为PyTyr[]是一个数组,而只是一个指向char的指针。

有人能解释一下这里发生了什么吗?为什么PMTone[]成为指向字符的指针数组?

文本
“a”
不是字符

你需要:

PMTone[7] = 'a';
“a”
不是字符,而是一个字符数组,“a”后跟空终止符

你需要

 PMTone[7] = 'a';
单引号。顺便说一句,我很惊讶它编译得更早,因为dataLength没有声明为const


PMTone
本身是字符数组的类型
char[8]
。但是,它会衰减为指针,
(*PMTone)
是第一个元素,类型为
char

数组是一种通过拥有第一个元素的地址并通过索引访问其他元素来存储值的方法。 数组基本上是指向第一个元素的指针

创建
字符数组时

char arr[n];
程序实际上为内存中的n个字符创建了空间

当访问
arr[0]
时,我们可以这样说:

arr[2] = 'a';
程序实际上是这样做的:

*(arr + 2) = 'a';
这意味着您正在访问一个字符,该字符存储在距离数组中第一个元素(因此为
arr+2
)的内存位置2字节之外,第一个元素为
arr[0]
。 第一个元素的地址是
&(arr[0])
或,
arr
。两者都是相同的值

错误是您试图将字符串
“a”
保存到
字符中

问题是您试图通过取消引用已取消引用的指针来修复它:

(*PMTone)[7] = "a"; // is the same as
(PMTone[0])[7] = "a"; // when it should be 
PMTone[7] = 'a';
(*PMTone)[7] = "a"; // is the same as
(PMTone[0])[7] = "a"; // when it should be 
PMTone[7] = 'a';