undefinierter Verweis auf `getline’ in c

Lesezeit: 2 Minuten

Benutzer-Avatar
Eric Cartman

Ich lerne, Getline in der C-Programmierung zu verwenden, und probierte die Codes aus 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;
 }

Das Problem ist jedoch, dass der Compiler immer wieder Fehler davon zurückgibt: undefinierter Verweis auf ‘getline’. Können Sie mir bitte sagen, was das Problem ist? Vielen Dank!

Ich verwende Win7 64bit + Eclipse Indigo + MinGW

  • Haben Sie versucht, mit zu kompilieren -std=gnu90?

    – Gandaro

    28. Oktober 2012 um 20:41 Uhr

Benutzer-Avatar
Amaurea

Die anderen Antworten haben das meiste davon abgedeckt, aber es gibt mehrere Probleme. Zuerst, getline() befindet sich nicht in der C-Standardbibliothek, sondern ist eine POSIX 2008-Erweiterung. Normalerweise wird es mit einem POSIX-kompatiblen Compiler verfügbar sein, da die Makros _POSIX_C_SOURCE mit den entsprechenden Werten definiert werden. Möglicherweise haben Sie einen älteren Compiler von früher getline() wurde standardisiert, in diesem Fall ist dies eine GNU-Erweiterung, und Sie müssen #define _GNU_SOURCE Vor #include <stdio.h> um es zu aktivieren, und muss einen GNU-kompatiblen Compiler wie gcc verwenden.

Zusätzlich, nbytes Typ haben sollte size_tnicht int. Zumindest auf meinem System sind diese unterschiedlich groß, mit size_t länger sein, und mit einem int* anstelle einer size_t* schwerwiegende Folgen haben kann (und auch nicht mit den Standard-gcc-Einstellungen kompiliert). Einzelheiten finden Sie auf der Handbuchseite von getline (http://linux.die.net/man/3/getline).

Mit dieser vorgenommenen Änderung wird Ihr Programm auf meinem System kompiliert und ausgeführt.

  • Wird das jetzt standardisiert? nach 9 Jahren.

    – VimNing

    11. Februar 2021 um 17:58 Uhr

  • @VimNing Nein. immer noch nicht in der Standardbibliothek, aber zumindest sind sie jetzt im TR-Block. Stein für Stein… (und jede Menge auf Ärschen sitzen und Nada machen).

    – WhozCraig

    28. Juni um 21:59 Uhr

Benutzer-Avatar
jdarthenay

Ich benutze auch MinGW. Ich habe die MinGW-Header überprüft und getline() in keinem C-Header erscheint, sondern nur in C++-Headern. Damit ist die C-Funktion gemeint getline() existiert nicht in MinGW.

getline ist keine Standardfunktion, Sie müssen ein Feature-Test-Makro festlegen, um es zu verwenden, laut meiner Manpage,

_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700

für glibc 2.10 oder höher,

_GNU_SOURCE

davor.

1245320cookie-checkundefinierter Verweis auf `getline’ in c

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy