Итак, я пытался получить доступ к аргументам командной строки с индексами, большими, чем argc в C++ (потому что почему бы и нет), и обнаружил, что на самом деле есть некоторые параметры, переданные программе. Следующий код выдает следующий результат в моей Ubuntu 14.04:C++ argv индексы больше argc
#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 Знаете ли вы, что * неопределенное поведение * означает? – melpomene
Кроме того, это похоже на то, что переменные окружения размещаются после аргументов командной строки в памяти. – melpomene