构建 argv 和 argc

Posted

技术标签:

【中文标题】构建 argv 和 argc【英文标题】:Building argv and argc 【发布时间】:2012-04-20 11:25:32 【问题描述】:

我是一名学生程序员,使用 Qt 构建工作用的​​ GUI 应用程序。此应用程序的主要目的是打开我们的一些旧样式文件,允许更好地编辑,然后以新格式和文件扩展名保存文件。最近有人要求我允许从终端进行这种转换。虽然我确实知道 argv 和 argc 是什么以及它们代表什么,但我不确定如何完成他们想要的。例如如何处理相对路径与绝对路径……也许如何从相对路径中获取绝对路径;也许这些都不需要。我的编程经验主要是使用 guis,所以这对我来说有点新。

用户希望从终端运行以下内容

application -o /fileLocation /fileDestination template(to determine new format)

我开始使用 for 循环和 if 语句来完成此任务,因为我意识到我可能正在对所有这一切采取陈旧的方法。如果 QT 有这方面的东西,我也会很感兴趣!这是我开始想出的:

int main(int argc, char *argv[])

    if(argc > 1)
    
        for(int i = 0; i < argc; i++)
        
            if(argv[i] == "-c")
            
                QString fileName = QString::fromStdString(argv[i+1]);
                QString fileDestination = QString::fromStdString(argv[i+2]);
                QString templateName = QString::fromStdString(argv[i+3]);
                QFile fileToConvert(fileName);
                if(fileToConvert.open(QFile::ReadOnly))
                
                //do stuff

感谢您阅读我的帖子,非常感谢您为帮助我解决此问题所做的任何贡献。

【问题讨论】:

【参考方案1】:

if(argv[i] == "-c")

你不能像这样比较 C 字符串。你可以比较字符,所以你可以这样做if(argv[i][0] == '-' &amp;&amp; argv[i][1] == 'c')

但在 Qt 中,您应该使用 QApplication::arguments 参见 Obtaining command line arguments in a Qt application

【讨论】:

杰出的马丁!感谢您在这里为我设置正确的课程!

以上是关于构建 argv 和 argc的主要内容,如果未能解决你的问题,请参考以下文章

Qt事件分发机制源码分析之QApplication对象构建过程

argc 和 argv 的目的是啥? [复制]

怎么使用argv

int main(int argc, char* argv[]) 和 int main(int argc, char** argv) [关闭]

argc 和 argv 用于除 main 以外的函数

为啥 MPI_Init 接受指向 argc 和 argv 的指针?