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 sizeuintmax_t begin进入其他代码,在这里并不重要,但具有正确的值。

fseekfread线条工作正常。实际上,我在 *data 中有文件内容,但是在执行最后一行时,我得到了访问冲突。

为什么我可以写入*datausing fread,但不能using *data[size] = '\0'

4

2 回答 2

5

您遇到了运算符优先级的问题 - 您想要(*data)[size],而不是*data[size]

于 2012-12-17T22:07:33.943 回答
3

您的问题是运算符的优先级*[]. *data[size]表示访问char*数据中的第 n 个字符,然后取消引用它的第一个字符,而不是获取指向的数组的第 n 个字符data

相反,您希望(*data)[size]以正确的顺序执行操作。

编辑:由于这是 C++,你最好使用char*&它来消除这些问题,或者更好地使用vector标准库并让标准库为你管理你的内存!

于 2012-12-17T22:08:17.157 回答