Shell
$ man exec
...
int execv(const char *pathname, char *const argv[]);
...
$
Код: Выделить всё
//hello.c
//компилить gcc -o hello hello.c
#include <stdio.h>
int main (int argc, char *argv[])
{
  printf ("Hello, word!");
  return 0;
}
Код: Выделить всё
//run.c
//компилить gcc -o run run.c
//запускать ./run
#include <stdio.h>
#include <unistd.h>
int main ()
{
  
  char * const argv [1] = {"foo"};
  printf("%s\n", argv [0]);
  
  execv ("hello", NULL);
 
  // execv ("hello", &argv [0]);
  // execv ("hello", argv);
  return 0;
}Так, если в execv передать NULL, программа hello вызовется без ошибок (см. код выше):
Shell
$ ./run
foo
Hello, word!
$
Код: Выделить всё
execv ("hello", &argv [0]);Код: Выделить всё
execv ("hello", argv);Shell
$ ./run
foo
$