【发布时间】:2015-09-20 06:13:10
【问题描述】:
所以我一直在尝试访问索引大于 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)
这是什么?它是否依赖于发行版?
【问题讨论】:
-
这称为未定义行为。它是通用的。
-
@kubuzetto 你知道未定义的行为是什么意思吗?
-
另外,您的环境变量似乎恰好放在内存中的命令行参数之后。
标签: linux gcc ubuntu-14.04 argv