Hiya I have a really simple program here that basically repeats what the user types at prompt. Here is an example run:

dell4(1)>./driver -h
Synopsis: Matt's Shell - it doesn't do much.
Usage: driver [option]
-h, --help prints this help message
-p, --pwd tells the shell to include the current working directory in
the prompt
dell4(2)>./driver -h -p
Synopsis: Matt's Shell - it doesn't do much.
Usage: driver [option]
-h, --help prints this help message
-p, --pwd tells the shell to include the current working directory in
the prompt
dell4(3)>./driver -p
dell4:/afs/umr.edu/users/matt/data/284/program1:>ls
You typed: ls
dell4:/afs/umr.edu/users/matt/data/284/program1:>word up
You typed: word up
dell4:/afs/umr.edu/users/matt/data/284/program1:>this is a test
You typed: this is a test
dell4:/afs/umr.edu/users/matt/data/284/program1:>!!
You typed: this is a test
dell4:/afs/umr.edu/users/matt/data/284/program1:>!!
You typed: this is a test
dell4:/afs/umr.edu/users/matt/data/284/program1:>exit

Goodbye.

dell4(4)>./driver
dell4:>hellow world
You typed: hellow world
dell4:>The time is 4:13 pm....
You typed: The time is 4:13 pm....
dell4:>!!
You typed: The time is 4:13 pm....
dell4:>exit

Goodbye.

dell4(5)>


Here is my code, I keep getting a segmentation fault when trying to compile:

Code:
#include <stdio.h>
#include <getopt.h>
#include <string.h>

/* Precondition: pwdYESNO is passed from main without any mods
 * Postcondition: rest of program is ran */
void ProcedeWithProg(int pwdYESNO);

/* Precondition: none
 * Postcondition: help message is printed */
void PrintHelpMessage();

int main(int argc, char *argv[])
{
   int userNeedsHelp = 0;
   int oc = 0;
   int pwdYESNO = 0;

   struct option longopts[] =
   {
      {"help", no_argument, NULL, 'h'},
      {"pwd",  no_argument, NULL, 'p'},
      {0, 0, 0, 0}
   };

   while((oc = getopt_long(argc, argv, "hp", longopts, NULL)) != -1)
   {
      switch(oc)
      {
         case 'h':
            PrintHelpMessage();
            userNeedsHelp = 1;
            break;
         case 'p':
	        pwdYESNO = 1;
	        break;
         case 0:
            /* getopt_long set a variable - nothing to do */
            break;
         case ':':
            /* missing option argument */
            fprintf(stderr, "%s: option '-%c' requires an argument\n",
               argv[0], optopt);
            break;
         case '?':
            /* Invalid option */
         default:
            /* Invalid option */
            fprintf(stderr, "%s: option '-%c' is invalid: ignored\n",
               argv[0], optopt);
            break;
      }
   }

   if(!userNeedsHelp)
   {
      ProcedeWithProg(pwdYESNO);
   }

   return 0;

}

void PrintHelpMessage()
{
   printf("Synopsis: This program doesn't really do anything.\n");
   printf("Usage: driver [option]\n");
   printf("   -h, --help      prints this help message.\n");
   printf("   -p, --pwd       tells the shell to include the working dir in the prompt");
}
   
void ProcedeWithProg(int pwdYESNO)
{
   char * string;
   char * prompt;
   char * hostNamePtr = getenv("HOSTNAME");
   char * pwdPtr = getenv("PWD");
   char * colon = ":";
   
   int bytes_read;
   int nbytes = 100;
   
   /*build prompt */
   if(!pwdYESNO)
   {
      strcpy(prompt, hostNamePtr);
   }
   else
   {
      strcpy(prompt, hostNamePtr);
      strcat(prompt, colon);
      strcat(prompt, pwdPtr);
   } 

   printf("%s:> ", prompt);
   string = (char *) malloc (nbytes + 1);
   bytes_read = getline (&string, &nbytes, stdin);
   
   if (bytes_read == -1)
   {
      printf("%s:> ERROR!\n", prompt);
   }
   else
   {
      printf("%s You Typed: %s\n", prompt,  string);
   }
   
}
any help/suggestions is greatly appreciated.