riferimento a `getline ‘in c

Sto imparando a usare getline in programmazione C e ho provato i codici da http://crasseux.com/books/ctutorial/getline.html

#include  #include  #include  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; } 

Tuttavia, il problema è che il compilatore continua a restituire errori di questo: riferimento non definito a ‘getline’ . Potresti dirmi qual è il problema? Grazie!

Sto usando Win7 64bit + Eclipse Indigo + MinGW

Le altre risposte hanno coperto la maggior parte di questo, ma ci sono diversi problemi. In primo luogo, getline() non si trova nella libreria standard C, ma è un’estensione POSIX 2008. Normalmente, sarà disponibile con un compilatore POSIX compatibile, poiché le macro _POSIX_C_SOURCE verranno definite con i valori appropriati. Probabilmente hai un vecchio compilatore da prima che getline() fosse standardizzato, nel qual caso questa è un’estensione GNU, e devi #define _GNU_SOURCE prima di #include per abilitarlo, e deve usare un compilatore compatibile con GNU , come gcc.

Inoltre, gli nbytes dovrebbero avere tipo size_t , non int . Sul mio sistema, almeno, queste sono di dimensioni diverse, con size_t è più lungo, e l’utilizzo di un int* invece di un size_t* può avere gravi conseguenze (e inoltre non viene compilato con le impostazioni gcc di default). Vedere la pagina del manuale getline (http://linux.die.net/man/3/getline) per i dettagli.

Con la modifica apportata, il tuo programma viene compilato e funziona correttamente sul mio sistema.

getline non è una funzione standard, è necessario impostare una macro test funzionale per usarla, secondo la mia pagina man,

 _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700 

per glibc 2.10 o successivo,

 _GNU_SOURCE 

prima di ciò.

Sto anche usando MinGW. Ho controllato le intestazioni MinGW e getline() non appare in nessuna intestazione C, appare solo nelle intestazioni C ++. Ciò significa che la funzione C getline() non esiste in MinGW.