Frage

Ich habe ein Socket -Programmierung gestartet und bin über die Funktion inet_ntoa gestoßen. Die Funktion hat den Prototyp char * inet_ntoa(struct in_addr in);.

Wie/wo wird diese Zeichenfolge zugewiesen? MUSS ICH ERGEBNISSE ABSETZUNG DIE IT?

War es hilfreich?

Lösung

Aus inet_ntoa(3):

Die Funktion inet_ntoa () konvertiert die Internet-Host-Adresse in der in Netzwerk-Byte-Reihenfolge angegebenen Reihenfolge in einer Zeichenfolge in Standardnummern und -dots. Die Zeichenfolge wird in a zurückgegeben Statisch zugewiesene Puffer, welche nachfolgenden Anrufe überschreiben werden

Also nein.

Andere Tipps

Nein, Sie befreien es nicht. Es handelt sich normalerweise um einen statischen Speicher innerhalb der Funktion oder mit Thread-spezifischen Daten, wenn Sie in einer Thread-Umgebung ausgeführt werden.

Aus Die endgültige Seite POSIX MAN:

Der Rückgabewert von inet_ntoa() kann auf statische Daten hinweisen, die durch nachfolgende Aufrufe zu überschrieben werden können inet_ntoa().

Auf dieser Seite heißt es auch:

Die Funktion inet_ntoa () muss nicht wieder eingetragen werden. Eine Funktion, die nicht wieder eingetragen werden muss, muss nicht mit Thread-Sicherheit sein.

Das bedeutet, dass es selbst in einer Gewinde möglicherweise nicht fadensicher ist überhaupt.

Mit anderen Worten, es kann so etwas implementiert werden wie:

char *inet_ntoa (struct in_addr xyz) {
    static char buff[50];
    // Do something with xyz to populate buff.
    return buff;
}

Sie müssen es nicht befreien, da es statisch ist.

Sie müssen jedoch eine Kopie des String -Inhalts annehmen, bevor Sie die Funktion erneut aufrufen. Andernfalls überschreiben Sie den Inhalt aus dem ersten Anruf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top