In the previous assignment you learned about command arguments that can be passed to the main
function as an array of strings. For example, if you write a program
int main(int argc, char * argv[]) { ...}and invoke the executable using the command line
./a.out one two threethen the value
4
will be passed to argc
in the main function, and
the string array argv
will be allocate memory space as in the diagram below.
argv
array depicted above. You will be using this library in future assignments, so make sure that your code is correct and clean.
You may want to review C strings and dynamic memory allocation before starting on this assignment.
In your csc1600 directory, create another directory called stringarray. In this new directory create three files: two C source files named driver.c and stringarray.c, and a header file named stringarray.h. The driver source file is the one containing the main function. The other two files contain implementations (C source file) and declarations (header file) for the functions listed below.
void InitArray(char *array[], int n); /* Input: array is an array of uninitialized pointers n is the number of entries in the array Action: Initialize all entries in the array to NULL */Note: The function
Init
assumes that no strings exist in the array at the time it is called.
void Insert(char *array[], char * s, int pos); /* Input: array is an array of strings s is a string to be inserted in the array pos is a valid array index Action: Insert s in position pos in the array */Note: You will need to use malloc to dynamically allocate memory for the string to be inserted in the array, and strcpy to copy the string into the newly allocated memory.
void Remove(char *array[], int pos); /* Input: array is an array of strings pos is a valid array index Action: Remove the string from position pos in the array (if any) */Note: If the entry value is NULL,
Remove
does not do anything. Otherwise, Remove
invokes free to deallocate the memory space allocated for the string with malloc
,
so that it does not create any memory leaks. Reset the array entry to NULL
to mark it
(no strings attached to it).
void RemovaAll(char *array[], int n); /* Input: array is an array of strings n is number of entries in the array Action: Remove all existing strings from the array */Note:
RemoveAll
may invoke Remove
to do the job.
void Print(char *array[], int pos); /* Input: array is an array of strings pos is a valid array index Action: Print out the string from position pos (if any) in the array */Note:
Print
must check first if the array entry is NULL (otherwise the printf
function will crash
if it is invoked with a NULL
pointer).
void PrintAll(char *array[], int n); /* Input: array is an array of strings n is the number of entries in the array Action: Print out all array entries */Here is some sample code that uses these functions, along with memory snapshots after each function invocation.
Code | Memory snapshot of myarray |
#define MAX 8 char * myarray[MAX]; | |
Init(myarray, MAX); | |
Insert(myarray, "one", 0); | |
Insert(myarray, "two", 1); | |
Insert(myarray, "three",2); | |
Remove(myarray, 1); | |
PrintAll(myarray, MAX); | Output is: one three |
Your driver should include code that thoroughly tests the correctness of each function.
stringarray
directory create a text file named readme
(not readme.txt
, or README
, or Readme
, etc.)
that contains:
Turn in a printout copy of the readme
file, and each of the three files (one printout per group). You will need to copy and paste your code into a text or a Word document in Windows, since you cannot print directly from Unix.
Leave the source code for all exercises in your directory csc1600/stringarray. Do not make any changes to these files after the due date for this assignment. If you wish to continue working on these exercises after the due date, make a copy of your directory stringarray using the following Unix command:
cp -r ~/csc1600/stringarray ~/csc1600/stringarray-copyA new directory called stringarray-copy will be created in your csc1600 directory. You may now make any changes you want to the files in your stringarray-copy directory, at any time.
40 | Total points possible |
10 | Program compiles successfully and runs |
15 | Each function performs its specified action |
10 | Code does not break if functions are passed NULL parameters
|
5 | Your readme file is present |