title: Unable to use "execve()" successfully
body: <p>The aim of the program is to fork a new child process and execute a process which also has command line arguments. If I enter <code>/bin/ls --help</code>, I get the error:</p>
  
  <pre><code>shadyabhi@shadyabhi-desktop:~/lab/200801076_lab3$ ./a.out
  Enter the name of the executable(with full path)/bin/ls --help
  Starting the executable as a new child process...
  Binary file to be executed: /bin/ls
  /bin/ls: unrecognized option '--help
  '
  Try `/bin/ls --help' for more information.
  Status returned by Child process: 2
  shadyabhi@shadyabhi-desktop:~/lab/200801076_lab3$
  </code></pre>
  
  <p>What would be the right argument to <code>execve()</code>?</p>
  
  <pre><code>#include&lt;stdio.h&gt;
  #include&lt;string.h&gt;      //strcpy() used
  #include&lt;malloc.h&gt;      //malloc() used
  #include&lt;unistd.h&gt;      //fork() used
  #include&lt;stdlib.h&gt;      //exit() function used
  #include&lt;sys/wait.h&gt;    //waitpid() used
  
  int main(int argc, char **argv)
  {
      char command[256];
      char **args=NULL;
      char *arg;
      int count=0;
      char *binary;
      pid_t pid;
      printf("Enter the name of the executable(with full path)");
      fgets(command,256,stdin);
      binary=strtok(command," ");
      args=malloc(sizeof(char*)*10);
      args[0]=malloc(strlen(binary)+1);
      strcpy(args[0],binary);
      while ((arg=strtok(NULL," "))!=NULL)
      {
          if ( count%10 == 0) args=realloc(args,sizeof(char*)*10);
          count++;
          args[count]=malloc(strlen(arg));
          strcpy(args[count],arg);
      }
      args[++count]=NULL;
      if ((pid = fork()) == -1)
      {
          perror("Error forking...\n");
          exit(1);
      }
      if (pid == 0)
      {
          printf("Starting the executable as a new child process...\n");
          printf("Binary file to be executed: %s\n",binary);
          execve(args[0],args,NULL);
      }
      else
      {
          int status;
          waitpid(-1, &amp;status, 0);
          printf("Status returned by Child process: %d\n",WEXITSTATUS(status));
      }
      return 0;
  }
  </code></pre>