gpt4 book ai didi

linux - C++ argv 索引大于 argc

转载 作者:太空宇宙 更新时间:2023-11-04 09:29:55 25 4
gpt4 key购买 nike

因此,我一直试图在 C++ 中访问索引大于 argc 的命令行参数(因为为什么不这样做),并发现实际上有一些参数传递给了程序。以下代码在我的 Ubuntu 14.04 中产生以下结果:

#include <cstdio>
int main (int argc, char** argv) {
for (int i=argc+1; argv[i]!=0; i++)
printf("%3d %s\n", i, argv[i]);
}

这是输出:

  2 XDG_VTNR=7
3 LC_PAPER=tr_TR.UTF-8
4 LC_ADDRESS=tr_TR.UTF-8
5 XDG_SESSION_ID=c2
6 XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/kubuzetto
7 SELINUX_INIT=YES
8 LC_MONETARY=tr_TR.UTF-8
9 CLUTTER_IM_MODULE=xim
(and so on)

这是什么,它是否依赖于发行版?

最佳答案

不要跑过argc,它没有定义。

在这种情况下,我们知道发生了什么。你看,main() 被声明和调用为

extern int main(int argc, char **argv, char **envp);

碰巧 argv 和 envp 的构建方式在 argv 之后立即留下 envp,所以跑到最后会遇到 envp。

它可能有一天会改变,所以不要依赖于这个工作。如果您想依赖内核的传递方法,请自己提供内核的入口点(必须在 asm [或可能是裸函数] 中完成,因为它看起来不像函数调用)。

关于linux - C++ argv 索引大于 argc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32673509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com