不通过main函数获取命令行参数(Win/Linux/Qt)

本文介绍了在不通过main函数的情况下,如何在Windows、Linux和Qt平台上获取命令行参数。在Windows上,可以使用getCommandLineW()和CommandLineToArgvW()函数;在Linux上,可以通过读取/proc/self/cmdline文件内容;在Qt环境中,利用QCoreApplication::arguments()可以直接获取参数,但需先创建QCoreApplication对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候我们需要用到命令行参数,而如果需要命令行的地方不是在main函数中,那么如何获取命令行参数就成了一个问题。如果通过参数传递的方式从main函数获取命令行参数,那么当有需求的函数距离main函数比较远(需要很多层调用)或者代码在main函数之前执行(例如全局对象的构造函数,不是什么好东西但你不能保证不会在工作遇到)时,我们就需要一些不经由main函数直接获取命令行参数的方法来帮助我们解决问题。
PS:个人水平以及时间按所限,代码方面用了不少强转以及qt的东西,总的来说只是提供一个思路和参考,日后有时间或许会加以修改

Windows平台

使用getCommandLineW()函数获取命令行,然后用CommandLineToArgvW()函数解析为wchar_t**格式。这里实际上应该用getCommandLine函数(宏定义,指向宽字符形式[W]和窄字符形式[A]的两个函数,这方面了解较少不多评论)

void getArguments()
{
    int argc = 0;
    wchar_t **argvw = ::CommandLineToArgvW(::getCommandLineW(), &argc); // 注意这里是传入argc的引用
    char **argv = new char*[argc];
    for( int i = 0; i < argc; i++)
        argv[i] = (char*)(new std::string(QString::fromUtf16((ushort*)argvw[i]).toLocal8Bit().constData()))->c_str(); // 各种类型转换看上去就很糟糕,如果大神们有更好的方法请留言:)
}

Linux平台

文件/proc/self/cmdline中的内容即为当前程序的命令行参数
需要注意的是,存储的命令之间并不

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值