Это должно работать под Linux:
#include <stdio.h>
#include <unistd.h>
void findargs(int *argc, char ***argv) {
size_t i;
char **p = &__environ[-2];
for (i = 1; i != *(size_t*)(p-1); i++) {
p--;
}
*argc = (int)i;
*argv = p;
}
int main(int argc, char **argv) {
printf("got argc=%d, argv=%p\n", argc, argv);
findargs(&argc, &argv);
printf("found argc=%d, argv=%p\n", argc, argv);
return 0;
}
Примечание. Сбой при вызове setenv ().