-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathflexArray.c
More file actions
73 lines (59 loc) · 1.32 KB
/
Copy pathflexArray.c
File metadata and controls
73 lines (59 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
typedef struct FlexArray{
char **arr;
int len;
int max_len;
} FlexArray;
FlexArray newFlexArray(){
FlexArray fa;
int max_len = 1;
fa.arr = malloc(max_len * sizeof(char *));
assert(fa.arr != NULL);
fa.len = 0;
fa.max_len = max_len;
return fa;
}
void flex(FlexArray *fa){
int new_len = 2 * fa->max_len;
//printf("Flexing from %d to %d\n", fa->max_len, new_len);
fa->arr = realloc(fa->arr, new_len * sizeof(char *));
assert( fa->arr != NULL);
fa->max_len = new_len;
}
void add(char *input, FlexArray *fa){
if(fa->len == fa->max_len)
flex(fa);
if(input != NULL){
int in_len = strlen(input);
fa->arr[fa->len] = malloc( (in_len+1) * sizeof(char));
strcpy(fa->arr[fa->len], input);
} else {
fa->arr[fa->len] = NULL;
}
fa->len++;
}
void printFlexArray(FlexArray fa){
int i;
putchar('{');
for(i=0 ; i<fa.len-1 ; i++){
if(fa.arr[i] != NULL)
printf("\"%s\", ", fa.arr[i]);
else
printf("NULL, ");
}
// Now print the last string, which should be a NULL but if/else just in case.
if(fa.arr[i] != NULL)
printf("\"%s\"}", fa.arr[i]);
else
printf("NULL}");
}
void emptyFlexArray(FlexArray *fa){
//printf("freeing array of size %d\n", fa->len);
for(int i=0 ; i < (fa->len) ; i++ ){
free( fa->arr[i] );
}
fa->len = 0;
}