référence indéfinie à `getline 'dans c
Je suis en train d'apprendre à utiliser getline dans la programmation en C et essayé les codes de http://crasseux.com/books/ctutorial/getline.html
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int atgc, char *argv[])
{
int bytes_read = 1;
int nbytes = 10;
char *my_string;
my_string = (char *)malloc(nbytes+1);
puts("Please enter a line of text");
bytes_read = getline(&my_string, &nbytes, stdin);
if (bytes_read == -1)
{
puts ("ERROR!");
}
else
{
puts ("You typed:");
puts (my_string);
}
return 0;
}
Cependant, le problème est que le compilateur retourne les erreurs de ce: undefined reference to 'getline'.
Pourriez-vous me dire quel est le problème? Merci!!!!
J'utilise Win7 64bit + Eclipse Indigo + MinGW
source d'informationauteur Eric Cartman
Vous devez vous connecter pour publier un commentaire.
Les autres réponses ont couvert la plupart de cette, mais il y a plusieurs problèmes. Tout d'abord,
getline()
n'est pas dans la bibliothèque C standard, mais est une POSIX 2008 extension. Normalement, il sera disponible avec un compatible POSIX compilateur, comme les macros _POSIX_C_SOURCE seront définis avec les valeurs appropriées. Vous avez probablement un vieux compilateur avantgetline()
a été normalisé, dans lequel cas, c'est une extension GNU, et vous devez#define _GNU_SOURCE
avant#include <stdio.h>
pour l'activer, et doit être à l'aide d'un GNU-compatible compilateur, comme gcc.En outre,
nbytes
devrait avoir le typesize_t
pasint
. Sur mon système, au moins, ceux-ci sont de taille différente, avecsize_t
étant la plus longue, et à l'aide d'unint*
au lieu d'unsize_t*
peut avoir des conséquences graves (et aussi n'est pas compilé par défaut de gcc paramètres). Voir le getline page de manuel (http://linux.die.net/man/3/getline pour plus de détails.Avec ce changement, votre programme compile et fonctionne très bien sur mon système.
getline
n'est pas une fonction standard, vous devez définir une macro de test de fonctionnalité de l'utiliser, selon ma page de man,pour la glibc 2.10 ou plus tard,
avant que.
Je suis également en utilisant MinGW. J'ai vérifié MinGW les en-têtes et
getline()
ne pas apparaître dans n'importe quel en-tête C, il semble qu'en C++ en-têtes. Cela signifie que la fonction Cgetline()
n'existe pas dans MinGW.