0

ファイルからテキストを読み取るための次の関数があります。

uintmax_t ResourcePack::getText(const string& file, char** data)
{
    *data = new char[static_cast<size_t>(size) + 1];
    fseek(_fileDescriptor, static_cast<long>(begin), SEEK_SET);
    fread(*data, static_cast<size_t>(size), 1, _fileDescriptor);
    *data[size] = '\0';
}

FILE* _fileDescriptor, uintmax_t sizeここでは重要ではありuintmax_t beginませんが、正しい値で他のコードに取得されます。

fseekそしてfreadラインはうまくいきます。実は *data にファイルの中身が入っているのですが、最後の行を実行するとアクセス違反になってしまいました。

*dataを使用して書き込むことができるのに、なぜできfreadないのusing *data[size] = '\0'ですか?

4

2 に答える 2

5

演算子の優先順位に問題があります。必要(*data)[size]ではありません*data[size]

于 2012-12-17T22:07:33.943 に答える
3

あなたの問題は、演算子*との優先順位です[]*data[size]が指す配列の n 番目の文字を取得するのではなく、 dataの n 番目の文字にアクセスし、char*その最初の文字を逆参照することを意味しますdata

(*data)[size]代わりに、正しい順序で操作を実行する必要があります。

char*&編集: これは C++であるため、この種の問題を解消するために使用した方がよいでしょう。または、標準ライブラリを使用してメモリを管理させる方がはるかに良いでしょう!vector

于 2012-12-17T22:08:17.157 に答える