Fonction getline renvoie (null)
gbenrais
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
gbenrais Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
gbenrais Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je n'utilise pas le C tous les jours, ma question est peut-être évidente.
J'utilise une application commerciale qui est un ensemble de programmes C et de librairies statiques C.
La commande de compilation finale est :
Tout se passe très bien sauf pour getline qui renvoie tout le temps (null). Je l'utilise pourtant de la façon la plus basique :
Cette fonction fonctionne très bien si je l'isole dans une tout petit programme qui ne contiendrait qu'un appel à cette fonction.
Je me demande donc si la librairie statique library.a interfère et ce comment ?
Merci,
Ghislain
Je n'utilise pas le C tous les jours, ma question est peut-être évidente.
J'utilise une application commerciale qui est un ensemble de programmes C et de librairies statiques C.
La commande de compilation finale est :
cc myfunction.o library.a -lm -o pgm
Tout se passe très bien sauf pour getline qui renvoie tout le temps (null). Je l'utilise pourtant de la façon la plus basique :
#include <stdio.h> #include <stdlib.h> #include <errno.h> void myfunction(){ FILE * fp; char * line = NULL; size_t len = 0; ssize_t read; fp = fopen("someFile.txt", "r"); if (fp == NULL){ exit(EXIT_FAILURE); } while ((read = getline(&line, &len, fp)) != -1) { printf("Retrieved line of length %zu:\n", read); printf("%s\n", line); } }
Cette fonction fonctionne très bien si je l'isole dans une tout petit programme qui ne contiendrait qu'un appel à cette fonction.
Je me demande donc si la librairie statique library.a interfère et ce comment ?
Merci,
Ghislain
A voir également:
- Fonction getline renvoie (null)
- Fonction si et - Guide
- Vers quelle adresse web renvoie ce lien - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Renvoie d'appel ooredoo ✓ - Forum telephonie fixe
4 réponses
Bonjour,
La réponse ne semble pas si évidente.
La fonction ne devrait retourner 0 que si le fichier est effectivement vide.
La bibliothèque statique peut interférer si elle contient une fonction qui a exactement le même nom et dans ce cas elle intercepterait la fonction de la bibliothèque de base.
La réponse ne semble pas si évidente.
La fonction ne devrait retourner 0 que si le fichier est effectivement vide.
La bibliothèque statique peut interférer si elle contient une fonction qui a exactement le même nom et dans ce cas elle intercepterait la fonction de la bibliothèque de base.
Il n'y a pas de
Peut-être en forçant le chargement de la bibliothèque standard avant library.a mais bof.
Il te reste à réécrire cette fonction en lui donnant au autre nom.
namespaceen C, dommage.
Peut-être en forçant le chargement de la bibliothèque standard avant library.a mais bof.
Il te reste à réécrire cette fonction en lui donnant au autre nom.
int mon_getline( char** lineptr , size_t* plg , FILE* file ) { if ( !lineptr || !plg || !file ) { errno = EINVAL; return -1; } if ( ferror( file ) ) return -1; if ( feof( file ) ) return -1; char line[255+1]; line[255] = '\0'; // needed if the line needs severals reads size_t written = 0; size_t len; do { if ( !fgets( line , 255 , file ) ) return -1; char* ptr = strchr( line , '\n' ); if ( ptr ) *ptr = '\0'; len = strlen( line ); // <255 if line is complete if ( written+len+1 > *plg ) { ptr = realloc( *lineptr , written+len+1 ); if ( !ptr ) return -1; *plg = written+len+1; *lineptr = ptr; } memcpy( *lineptr + written , line , len+1 ); written += len; } while ( len == 255 ); // the read was incomplete, continue return (int)written; }
Bonjour Dalfab,
Merci pour ta réponse, getline ne renvoie pas (null), elle renvoie 0 et affecte (null) à line, excuse pour l'erreur.
Ton intuition doit être la bonne. Y a t il moyen en C d'utiliser qqe chose comme les namespaces pour gérer les situations de doublons de noms ? Je pourrai alors faire référence à la bonne fonction getline de stdio.
Merci
Merci pour ta réponse, getline ne renvoie pas (null), elle renvoie 0 et affecte (null) à line, excuse pour l'erreur.
Ton intuition doit être la bonne. Y a t il moyen en C d'utiliser qqe chose comme les namespaces pour gérer les situations de doublons de noms ? Je pourrai alors faire référence à la bonne fonction getline de stdio.
Merci