title: Command parsing UNIX shell C
body: <p>I was trying to create a program where I could parse the command and parameters enters by the user into specific arrays (these commands and params would execute commands like "ls", "ls -l", "ls -l | wc" However, I am having problem with parsing:</p>
  
  <pre><code>        //Split the command and store each string in parameter[]
      cp = (strtok(command, hash));                      //Get the initial string (the command)
      parameter[0] = (char*) malloc(strlen(cp)+ 1);                     //Allocate some space to the first element in the array
      strncpy(parameter[0], cp, strlen(cp)+ 1);
      for(i = 1; i &lt; MAX_ARG; i++)
      {
      cp = strtok(NULL, hash);                 //Check for each string in the array
      parameter[i] = (char*) malloc(strlen(cp)+ 1);
      strncpy(parameter[i], cp, strlen(cp)+ 1);                      //Store the result string in an indexed off array
          if(parameter[i]  == NULL)
          {
              break;
          }
      if(strcmp(parameter[i], "|") == 0)
      {
          cp = strtok(NULL, hash);
          parameter2[0] = (char*) malloc(strlen(cp)+ 1);
          strncpy(parameter2[0], cp, strlen(cp)+ 1);
          //Find the second set of commands and parameters
          for (j = 1; j &lt; MAX_ARG; j++)
          {
              cp = strtok(NULL, hash);
              if (cp == NULL)
              {
                  leave = 1;
                  break;
              }
              else
              {
                  parameter2[j] = (char*) malloc(strlen(cp)+ 1);
                  strncpy(parameter2[j], cp, strlen(cp)+ 1);
              }
  
          }
      }
      if (leave == 1)
      {
          break;
      }
  }
  </code></pre>
  
  <p>I run into a problem when I do if (strlen(cp) == NULL), there is a segmentation fault.
  I am trying to break out of the larger for loop once all the inputs have been entered into arrays. I can succesfully enter the correct string elements into the arrays but I just can't exit the loop once I have done so.</p>