Returning an Array of Strings
|
These examples do not free their allocated storage, as they ought to.
Questions (in the recitation):
Incorrect Method | Correct Method (Use for Rec 8) | Another Correct Method |
---|---|---|
#include <stdio.h> void create_string(char ***q) { char *name [] = {"Neal", "R.", "Wagner", NULL}; *q = name; } void mess_up() { /* stack */ int a[20]; int i; for (i = 0; i < 20; i++) a[i]= i; } void print_string(char **p) { while (*p) printf("%s ", *(p++)); printf("\n"); } int main() { char **p; create_string(&p); print_string(p); mess_up(); print_string(p); } |
#include <stdio.h> void create_string(char ***q) { char **name = (char **) malloc(sizeof(char *)*4); *name = "Neal"; *(name+1) = "R."; *(name+2) = "Wagner"; *(name+3) = NULL; *q = name; } void mess_up() { int a[20]; int i; for (i = 0; i < 20; i++) a[i]= i; } void print_string(char **p) { while (*p) printf("%s ", *(p++)); printf("\n"); } int main() { char **p; create_string(&p); print_string(p); mess_up(); print_string(p); } |
#include <stdio.h> void create_string(char **q) { *q = "Neal"; *(q+1) = "R."; *(q+2) = "Wagner"; *(q+3) = NULL; } void mess_up() { int a[20]; int i; for (i = 0; i < 20; i++) a[i]= i; } void print_string(char **p) { while (*p) printf("%s ", *(p++)); printf("\n"); } int main() { char **p = (char **) malloc(sizeof(char *)*4); create_string(p); print_string(p); mess_up(); print_string(p); } |
% cc -o param_wrong param_wrong.c % param_wrong Neal R. Wagner Segmentation fault |
% cc -o param param.c % param Neal R. Wagner Neal R. Wagner | % cc -o param2 param2.c % param2 Neal R. Wagner Neal R. Wagner |