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.