Хочу запустить из своего си кода другую программу с помощью execve() и передать ей часть тех аргументов, что передали моему коду. В документации по execve() сказано, что массив argv должен завершаться NULL. На практике argv[argc] действительно NULL.
Допустим, я хочу передать все аргументы, начиная с третьего. Руки чешутся написать что-то вроде такого:
char** nargv = &argv[2];
execve( ..., nargv, ... );
Насколько такое корректно и могу ли я полагаться на тот NULL-терминатор, который должен быть в конце массива argv? Может ли быть ситуация, что его там попросту не будет?