Qt功能在跳过第一个时重复第二个参数

时间:2014-07-14 03:20:41

标签: c++ qt

以下代码摘自我的Qt程序,该程序将多个文件名作为多个QLineEdits的输入,并在按下按钮时将文件合并为一个。我最初在C ++中编写代码作为命令行工具,现在当我尝试将来自QLineEdits的输入作为const char * argv []提供给命令行工具时出现问题。

问题是,由于某种原因,命令行代码将argv [1]和argv [2]作为第二个文件,而Qt代码向我保证argv [1]是第一个和argv [2]是第二个。

void VLay::condenseReflectanceFiles()
{
    /**makes argv for wo_condense**/
    const char* argv[size+1];

    /**initialize first entry which wo_condense, when ran in terminal, thinks is the executable**/
    argv[0] = NULL;

    /**converts the text in the LineEdits into character strings and adds to argv**/
    for(int k=0; k<size; k++)
    {
        argv[k+1] = fileList[k]->text().toUtf8();
        //cout<< argv[k+1];
    }

    /**add one for the initial executable entry**/
    wo_condense_R(size+1, argv);
}

int wo_condense_R(int argc, const char * argv[])
{
    cout<< argv[1];
    cout<< argv[2];
    return 0;
}

这里理论上有什么问题吗?

感谢。

1 个答案:

答案 0 :(得分:1)

在以下声明中:

argv[k+1] = fileList[k]->text().toUtf8();

此表达式返回的QByteArray()

fileList[k]->text().toUtf8()

是一个在语句结束时被销毁的临时文件。因此,您存储在argv[]数组中的指针立即无效。

也许尝试类似的事情:

argv[k+1] = qstrdup(fileList[k]->text().toUtf8().constData());

如果您使用delete [],请务必在这些指针上调用qstrdup()