/* Program to demonstrate malloc for strings and character arrays */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int
main (void) 
{
  /*               0123456789012345  */
  char str1[17] = "computer science";       /* a character array for a string */
  int i;
  
  printf ("str1 is %s\n", str1);        /* access character array as a string */
  printf ("str1 backward is ");  /* access individual characters in the array */
  for (i = strlen(str1)-1 ; i >= 0 ; i--)
    printf ("%c", str1[i]);
  printf ("\n");

  char * str2 = str1;   /* a pointer to reference an existing character array */
  printf ("str2 is %s\n", str2);
  printf ("str2 backward is ");
  for (i = strlen(str2)-1 ; i >= 0 ; i--)
    printf ("%c", str2[i]);
  printf ("\n");

  char * str3;                         /* a pointer to reference a new string */
  str3 = malloc (27 * sizeof(char));      /* allocate space for 27 characters */

  char ch;                               /* initialize to lower case alphabet */
  for (ch = 'a', i = 0 ; ch <= 'z' ; ch++, i++)
    str3[i] = ch;
  str3[26] = 0;                              /* insert null string terminator */

  printf ("str3 is %s\n", str3);
  printf ("str3 backward is ");
  for (i = strlen(str3)-1; i >= 0 ; i--)
    printf ("%c", str3[i]);
  printf ("\n");

  return 0;
} // main
