ECE-1021
HOMEWORK #5
(Last Mod: 27 November 2010 21:38:41 )
Create a robust, safe function for getting strings from the keyboard.
Create functions that perform some basic string manipulations.
Write the following function to get string input from the keyboard.
int kgets(char *s, size_t size);
This function accepts a pointer to memory that has been 
  allocated a minimum of size bytes. The size_t data
  type is simply an integer data type suitable for suitable for representing the
  sizes of objects. It is a defined by the compiler developer using a typedef
  statement which is very similar to a #define statement. On
  most compilers, it is an alias for an unsigned int. Using size_t
  instead of int or unsigned int just
  makes your code more portable to other compilers. 
The function reads 
  characters from the standard input device using getc() 
  until either a newline character is read, an EOF value is 
  returned by getc(), or (size-1) 
  characters have been read. The string is then null terminated. Neither the 
  newline character nor EOF (which is not an ASCII code to 
  begin with) is stored in the string. 
If the function did not encounter a newline character or 
  EOF before reading in (size-1) 
  characters, the function should continue reading in (and discarding) 
  characters from stdin until a newline character or 
  EOF is read.
The function should return the number of characters that were discarded.
Your test program should include strings that are empty, strings that are well short of the size passed to the function, strings that are one less, equal to, and one more than the size passed to the function, and strings that are well in excess of the size passed to the function.
For each string read in, your program should print out the 
  size that was passed to the kgets() function, the string that was stored, and the number of 
  characters that were discarded.
Write the following function that returns the length of a string.
int strlen(const char *s);
The length of the string is defined as the number of characters in the string not including the null-terminator.
Write the following function that copies one string into another.
char *strcpy(char *dest, const char *src);
The return value is a pointer to the destination string.
Write the following function that appends one string to another.
char *strcat(char *dest, const char *src);
The return value is a pointer to the destination string.
Write the following function that converts all characters within a string to upper case.
char *strupr(char *s);
The return value is a pointer to the destination string.
Write the following function that converts all characters within a string to upper case.
char *strlwr(char *s);
The return value is a pointer to the destination string.
The following two functions are Extra Credit
Write the following function that allocates new memory for a copy of a string.
char *dstrcpy(const char *src);
The return value is a pointer to the newly allocated destination string.
Write the following function that allocates new memory for the combination of two strings.
char *dstrplus(const char *s1, const char *s2);
The return value is a pointer to the newly allocated destination string.
Your test program should use each of these functions in such a way that it is reasonably clear that they are performing properly. It does not take extensive code to do this.
Do not forget to perform garbage collection on the dynamically allocated memory.