C++编辑char* argv[]元素

5

大家都知道这个函数:

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

}

我希望为我的程序在Linux中编写一个命令行界面,通常可以使用 getopt_long() 来完成。

我的程序将像这样从命令行执行:

pop3 get --limit 25 --recent 

因此,argv[] 将包括 pop3 作为其程序名称,其余部分被视为选项。 我想从我的字符串中删除 pop3 并将其后的第一个标记设置为数组的第一个元素。是否有其他方法来做到这一点,而不是通过循环实现?

16
简单解决方案:切掉它:argv++; argc--;。该操作会将指向命令行参数的指针向后移动一位,同时减小参数个数。 - Colonel Thirty Two
技巧:您无法修改属于只读内存的字符串,只需停止指向它们即可。 - Asim
“通常使用 getopt_long() 完成”,这是什么意思?你会使用 getopt_long() 吗? - user3386109
3
如果你要使用getopt_long,那么正确的答案是:"你不需要做任何事情,getopt_long会自动跳过第一个参数。" - user3386109
是的,有一种正确的方法,伙计。你想要做的是忽略命令行中的“get”,这很容易做到,而你接受的答案并不是正确的方法。 - user3386109
显示剩余3条评论
1个回答

13

argv 指针递增,同时将 argc 递减。 示例:

int main(int argc, char *argv[])
{
    argc--;
    argv++;

    return 0;
}

这个可以工作,因为当你递增 argv 时,你仍然在内存中保留了先前的数据,只是 argv 的基地址增加了。而且你会递减 argc,因为现在少了一个参数。


哇!如此简单的解决方案。非常感谢你! - AntumDeluge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接