Intereting Posts

неопределенная ссылка на `getline ‘в c

Я учусь использовать getline в программировании на языке C и пробовал коды из 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; } 

Однако проблема заключается в том, что компилятор продолжает возвращать ошибки: undefined reference to getline . Не могли бы вы рассказать мне, в чем проблема? Спасибо!

Я использую Win7 64bit + Eclipse Indigo + MinGW

    Другие ответы покрыли большую часть этого, но есть несколько проблем. Во-первых, getline() не находится в стандартной библиотеке C, но является расширением POSIX 2008. Обычно он будет доступен с совместимым с POSIX компилятором, так как macros _POSIX_C_SOURCE будут определены с соответствующими значениями. Возможно, у вас есть старший компилятор, прежде чем getline() был стандартизирован, и в этом случае это расширение GNU, и вы должны #define _GNU_SOURCE перед #include чтобы включить его, и должны использовать GNU-совместимый компилятор , например gcc.

    Кроме того, nbytes должны иметь тип size_t , а не int . В моей системе, по крайней мере, они имеют разный размер, причем size_t длиннее, а использование int* вместо size_t* может иметь серьезные последствия (а также не компилируется с настройками gcc по умолчанию). Подробнее см. Страницу руководства getline (http://linux.die.net/man/3/getline).

    С внесенными изменениями ваша программа компилируется и работает отлично в моей системе.

    getline не является стандартной функцией, вам нужно установить макрос проверки функций, чтобы использовать его, согласно моей странице man,

     _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700 

    для glibc 2.10 или новее,

     _GNU_SOURCE 

    до этого.

    Я также использую MinGW. Я проверил заголовки MinGW, и getline() не появляется ни в одном из заголовков C, он появляется только в заголовках C ++. Это означает, что функция C getline() не существует в MinGW.