Je continue de recevoir une erreur de segmentation lorsque j'essaie d'ouvrir un fichier en utilisant fopen et une structure qui contient un type FILE. Nouveau à C donc désolé si c'est une question noob. Code pour la struct:Réception d'une erreur de segmentation lors de l'utilisation d'une structure avec type FILE - C
typedef struct _FileInternal {
FILE* fp;
char mem[2];
} FileInternal;
// file handle type
typedef FileInternal* File;
Code pour le fichier ouvert:
File open_file(char *name) {
File a;
fserror=NONE;
// try to open existing file
a->fp=fopen(name, "r+");
if (! a->fp) {
// fail, fall back to creation
a->fp=fopen(name, "w+");
if (! a->fp) {
fserror=OPEN_FAILED;
return NULL;
}
}
return a;
}
Essayer fichier f; f = fopen ("newfile.dat"); renvoie la panne
Toute aide est très appréciée!
Voir [Est-ce une bonne idée de 'pointeurs typedef'?] (Http: // stackoverflow. com/questions/750178/is-it-a-good-idea-to-typedef-pointters) Considérez ceci comme une pièce à conviction - la réponse est "Non" (sauf peut-être vous avez affaire à des pointeurs de fonction). –
Notez également que les noms commençant par un trait de soulignement et suivi d'un autre caractère de soulignement ou d'une lettre majuscule sont réservés à toute utilisation par l'implémentation. Ne créez pas de noms commençant par des underscores (simplistes mais sûrs). Ou lisez les règles complètes au § 7.1.1 Identificateurs réservés dans la norme C et dans les sections similaires des normes connexes (par exemple, POSIX). –
Ce n'est pas une bonne idée de typer les pointeurs car ot rend le code illisible (vous savez quel est le pointeur, quel est l'objet réel, etc. car il ne provient pas de la déclaration). La seule exception sont les pointeurs de fonction. –