// In person2.cpp, the change_age function is CORRECT. // See person1.cpp for an INCORRECT version. #include #include #include "person2.h" int string_length(char * my_string) { int counter = 0; while(1) { if (my_string[counter] != 0) { counter++; } else { break; } } return counter; } 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; } struct person input_person() { struct person result; printf("please enter name:\n"); char * input = (char *) malloc(sizeof(char) * 1000); scanf("%s", input); result.name = copy_string(input); free(input); printf("please enter age:\n"); scanf("%d", &(result.age)); return result; } void print_person(char * name, struct person p1) { printf("%s name: %s\n", name, p1.name); printf("age = %d\n", p1.age); } // making a deep copy of a person struct person copy_person(struct person p1) { struct person result = p1; result.name = copy_string(p1.name); return result; } void change_age(struct person * p1) { printf("please enter new age:\n"); scanf("%d", &(p1->age)); } int main(void) { struct person p1 = input_person(); printf("before change of age:\n"); print_person("p1", p1); change_age(&p1); printf("\nafter change of age:\n"); print_person("p1", p1); free(p1.name); }