The function makearg is supposed to count the number of words in a char array and also break each word up into their own spot in a pointer array. Segmentation fault seems to be a problem with the strncpy function.
int makearg(char s[], char ***args);
int main(){
  char **args = (char**)(malloc(100));
  char *str = "ls is a -l file";
  int argc;
  argc = makearg(str, &args);
  printf("%d", argc);
  printf("%c", '\0');
  int i;
  for(i = 0; i < argc; i++){
    puts(args);
    printf("%c", '\n');
  }
  return 0;
}
/////////////////////////////////////////
int makearg(char s[], char ***args){
  int argc = 0;
  int charc = 0;
  int wordstart = 0;
  while(1){
    if(s[charc] == '\0'){
      strncpy(*args[argc], s + wordstart, charc - wordstart);
      args[argc][(charc - wordstart) + 1] = '\0';
      argc++;
      break;
  }
  if(s[charc] == ' '){
    strncpy(*args[argc], s + wordstart, charc - wordstart);
    args[argc][(charc -  wordstart) + 1] = '\0';
    wordstart = charc + 1;
    argc++;
    charc++;
  }
  else{
    charc++;
    }
  }
  return argc;
}
 
     
    