我想选择一个文件,并将文件名存储为QT表单的char *
成员变量。我有以下
void MainWindow::SelectVolFile(){
QString qFileName = QFileDialog::getOpenFileName(this,
tr("Select VOL file..."), QDir::currentPath(), tr("Files (*.VOL)"));
if (!qFileName.isEmpty()){
QByteArray byteFileName = qFileName.toLatin1();
this->fileName = byteFileName->data();
}
}
但是,我认为一旦该函数返回,
byteFileName->data()
就会超出范围。解决此问题的好方法是什么?我不确定应该将哪个变量放在堆上。 最佳答案
在很大程度上取决于this->fileName
。如果fileName
是char*
,那么您是对的:byteFileName
超出范围,并且byteFileName->data()
将被释放,从而导致悬空指针this->fileName
。
解决这种情况的最简单方法是将this->fileName
的类型设置为QString
,std::string
或其他实际上复制byteFileName->data()
内容的类型。
关于c++ - 确保文件名不超出范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15584126/