【发布时间】:2012-12-05 01:41:22
【问题描述】:
我有这个从文件中读取文本的功能:
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 中有文件内容,但是在执行最后一行时,我得到了访问冲突。
为什么我可以使用fread 写入*data,但不能使用using *data[size] = '\0'?
【问题讨论】:
-
运算符优先级 - 你想要
(*data)[size],而不是*data[size]。 -
正如@PaulR 所说...通常我更喜欢存储一个临时的
char*变量并在函数中使用它,然后在返回之前通过char**存储它。这样我就避免了可能导致错误和/或眼睛酸痛的额外语法错误。 =) -
0xCC 表示您已阅读uninitialized memory
标签: c++