我知道Qt有很多很好的方法来读取文件。但是在我的工作中,我必须使用Qt打开一个文件,并获得一个指向文件起始地址的指针。那么怎么做?< / p>
这是我的代码:
char *buffer;
if(file.open(QIODevice::ReadOnly))
{
QByteArray dataArray=file.readAll();
buffer=dataArray.data();
}
char test[1024];
for(int i=0;i<1024;i++)
{
test[i]=*buffer;
buffer++;
}
我使用QByteArray QIODevice::readAll()
从设备读取所有可用数据,并将其作为字节数组返回。
然后我使用char * QByteArray::data()
设置我的指针buffer
。
但是当我尝试通过for循环读取数据时,我的Qt调试器会给我一个error:read access violation
,那么这会怎么样?
答案 0 :(得分:1)
您获得访问冲突的原因是dataArray
在if
代码块中声明并超出范围。您想在该块之外声明dataArray
,例如:
QByteArray dataArray;
if(file.open(QIODevice::ReadOnly))
{
dataArray = file.readAll();
}
else
{
// give error
}
char *buffer = dataArray.data();
char test[1024];
for(int i = 0; i < 1024; i++)
{
test[i] = *buffer;
buffer++;
}
您的代码中还有其他潜在问题:
首先,如果从文件中读取的数据大小小于1024怎么办?然后,您将读取缓冲区的末尾(更多访问冲突)。
其次,如果文件真的很大怎么办?一次读取所有数据可能会导致交换/分页。