-1

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;
}

ここで、PMTone[7] をテストとして設定しています。

PMTone[7] = "a";

エラーが発生します:

mdfTree.cpp:92:21: エラー: 'const char*' から 'char' への変換が無効です [-fpermissive]

PMTone[] が char の配列として定義されているのに、PMTone[] の要素が char へのポインターである理由がわかりません。

PMTone[] を文字へのポインターの配列として扱う場合:

(*PMTone)[7] = "a";

理解できない別のエラーが表示されます。

mdfTree.cpp:91:18: エラー: 配列添え字の型 'char[int]' が無効です

これは、コンパイラが PMTone[] を配列とはまったく見なさず、単に char へのポインターと見なしていることを意味しているようです。

ここで何が起こっているのかを明らかにできる人はいますか? PMTone[] が文字へのポインタの配列になったのはなぜですか?

4

3 に答える 3

2

リテラル"a"は文字ではありません。

必要なもの:

PMTone[7] = 'a';
于 2012-10-22T08:56:35.150 に答える
1

"a"は文字ではなく、文字の配列であり、'a' の後に null ターミネータが続きます。

あなたが必要だろう

 PMTone[7] = 'a';

一重引用符で。ちなみに、dataLength が const として宣言されていないため、コンパイルが早くなることに驚いています。

PMToneそれ自体はchar[8]、文字の配列である型です。ただし、ポインターに減衰し、(*PMTone)タイプの最初の要素ですchar

于 2012-10-22T08:56:36.260 に答える