The cstring library provides several predefined functions to manipulate C-style strings. Likewise, the C++ string class provides another mechanism to store and manipulate strings. The underlaying feature of both is to have a character array where the last character in the string is the null character, '\0', which is used as a sentinel value to mark the end of the string.
For this lab, we are going to pretend that these functions do not exist.
We are going to write a function called
char *getAndCopy(char *, int)
which will recreate both cin.getline() and strncpy(). This function will
read characters from the keyboard, up until the given limit or the newline
character. It will then allocate a second character array and copy all the
characters it just read into the second array. It will then return the
second array.
It is very critical that you set the null character after reading the characters from the keyboard. If the null character is not set, any attempt to output or manipulate the string will keep going character-by-character in memory until it randomly comes across a null character.
The pseudocode for this function is as follows:
Function getAndCopy(char *str, int max): declare a temporary single character called c declare a temporary character pointer called tmp declare an integer called count and initialize to 0 cin.get(c) while c is not '\n' and count is less than max-1 copy c into str at index count increment count cin.get(c) end-while set index count in str to the null character use new command to allocate count+1 characters to tmp if allocation fails return NULL else for each character in str (index 0 to count-1) copy str's character over to tmp end-for set the null character at the end of tmp return tmp end-ifNote that you could also create a function called
char *getAndReverse(char *, int)
by changing the final for() loop to count down from count-1 to 0 for str's
index number and to count up for tmp's index number.
Use the following main() function:
int main() { char line[121]; char *copy = NULL; copy = getAndCopy(line, 120); cout << "Pointer information.\n"; cout << "Address of line: " << &line << endl; cout << "Address of copy: " << © << endl; cout << "Base address of line pointed to by copy: " << &(copy[0]) << endl; cout << "\nContents of the strings:\n"; cout << "Line: " << line << endl; if(copy == NULL) { cout << "Copy failed!\n"; } else { cout << "Copy: " << copy << endl; delete [] copy; // Deallocate the string } return 0; }Email me the complete lab6.cpp with the above main() function and your coded
getAndCopy
function.