#include #include #include "address.h" char * copy_string(char * input) { int length = string_length(input); char * result = (char *) malloc(sizeof(char) * (length + 1)); int i; for (i = 0; i <= length; i++) { result[i] = input[i]; } return result; } int string_length(char * my_string) { int counter = 0; while(1) { if (my_string[counter] != 0) { counter++; } else { break; } } return counter; } void input_address(struct address * a1) { ???????????????? } void print_address(struct address a1) { ???????????????? } struct address shallow_copy(struct address a1) { ???????????????? } struct address deep_copy(struct address a1) { ???????????????? } void foo1(struct address * a1) { ???????????????? } void foo2(struct address a1) { ???????????????? } void foo3(struct address * a1) { ???????????????? } int main() { struct address a1; input_address(&a1); // backup plan: if you cannot get input_address to work, just use the next lines: // a1.street_number = 20; // a1.street_name = copy_string("No_Name_Street"); // a1.city = copy_string("Arlington"); // a1.state = copy_string("Texas"); printf("a1, at step 0:\n"); print_address(a1); foo1(&a1); printf("a1, at step 1:\n"); print_address(a1); struct address a2 = shallow_copy(a1); struct address a3 = deep_copy(a1); foo2(a2); printf("a2, at step 2:\n"); print_address(a2); foo3(&a3); printf("a3, at step 3:\n"); print_address(a3); free(a1.street_name); free(a1.city); free(a1.state); free(a3.street_name); free(a3.city); free(a3.state); }