我想选择一个文件,并将文件名存储为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。如果fileNamechar*,那么您是对的:byteFileName超出范围,并且byteFileName->data()将被释放,从而导致悬空指针this->fileName

解决这种情况的最简单方法是将this->fileName的类型设置为QStringstd::string或其他实际上复制byteFileName->data()内容的类型。

关于c++ - 确保文件名不超出范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15584126/

10-11 17:59