Δημοσιεύτηκε: 01 Απρ 2012, 18:11
από Ilias95
migf1 έγραψε:Για να το διορθώσεις, θα πρέπει να περάσεις τον file by-reference στην open_file, δηλαδή &fp

Μήπως εννοείς &file;

Αλλά και έτσι δεν δουλεύει:
Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define MYFILE "/home/ilias/lol.txt"

bool open_file(FILE *fp, char filename[])
{
return ((fp = fopen(filename, "r")) == NULL) ? false : true;
}

int main(void)
{
FILE *file = NULL;

if (! open_file(&file, MYFILE)) {
printf("%s can't be opened\n", MYFILE);
exit(EXIT_FAILURE);
}

fclose(file);
exit(EXIT_SUCCESS);
}

Έτσι περνάω τον file by-reference στην open_file() δηλαδή περνάω την διεύθυνση μνήμης ενός pointer.
Άρα η open_file() περιμένει pointer; Ή pointer σε pointer;
Μπερδεύτηκα...

Edit:
Πρέπει να δουλεύει έτσι. Μισό να το τσεκάρω.
Spoiler: show
Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define MYFILE "/home/ilias/lol.txt"

bool open_file(FILE **fp, char filename[])
{
return ((*fp = fopen(filename, "r")) == NULL) ? false : true;
}


int main(void)
{
FILE *file = NULL;

if (! open_file(&file, MYFILE)) {
printf("%s can't be opened\n", MYFILE);
exit(EXIT_FAILURE);
}

fclose(file);

exit(EXIT_SUCCESS);
}

Edit2: Ναι, δουλεύει. :)