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 |