I am trying to allocate space and put in file data in my function for my array of char arrays pointer in main. I get a segmentation fault when I run the program. Can anyone tell me why?
datawords[0] is printed correctly in the function.
This is my function:
void database_extract (char **data_words) {
FILE *f_data;
f_data = fopen("database.txt","r");
struct stat st;
stat("database.txt", &st);
data_words = (char **)malloc(st.st_size * sizeof(char));
if (data_words == NULL) {
printf("No room\n");
exit(EXIT_FAILURE);
}
data_words[0] = "test";
printf("%s",data_words[0]);
}
This is my main:
int main () {
char **data_words;
database_extract (data_words);
printf("%s",data_words[0]);
}
Any help would be greatly appreciated.
You need to pass to the function a pointer to the data_words array in order to use the allocation in the main.
try this:
void database_extract (char ***data_words) {
FILE *f_data;
f_data = fopen("database.txt","r");
struct stat st;
stat("database.txt", &st);
*data_words = (char **)malloc(st.st_size * sizeof(char));
if (data_words == NULL) {
printf("No room\n");
exit(EXIT_FAILURE);
}
data_words[0] = "test";
printf("%s",data_words[0]);
}
and in the main:
int main () {
char **data_words;
database_extract (&data_words);
printf("%s",data_words[0]);
}
I am not sure if I got all the * right it gets me confused sometimes but the idea is to pass a pointer to the function.
When you want something to be initialized by a function you need to use a &
on the function call and one extra *
in the function signature
void database_extract (char ***data_words) {
which is matched by
database_extract (&data_words);