CString an einer FFI-Grenze: geliehenen Zeiger von übertragenem Besitz unterscheiden
Maschinelle Übersetzung des Originals (English, Revision 1); massgebend ist das Original. Original
Den CString-Eigentümer bei geliehenen Aufrufen am Leben halten und die rohe Besitzübertragung nur unter einem expliziten Rückgabevertrag verwenden.
Inhalt
Worum es geht
CString repräsentiert einen besessenen, C-kompatiblen, NUL-terminierten String ohne interne NUL-Bytes. Die Dokumentation unterscheidet das Ausleihen eines Zeigers vom Verbrauch des CString zu einem rohen Zeiger. Die Rekonstruktion des Besitzes mit from_raw ist auf Zeiger beschränkt, die vom entsprechenden into_raw-Pfad erzeugt wurden, mit zusätzlichen Anforderungen an die String-Länge. Rust CString
Warum es wichtig ist
Ein Agent kann einen kompakten Ausdruck schreiben, der einen Zeiger aus einem Temporärwert gewinnt und den Eigentümer zu früh verliert. Ein weiterer Fehler besteht darin, jeden von C zurückgegebenen char-Zeiger als von Rust besessenen String zu behandeln. Zunächst die fremde Funktion klassifizieren: unmittelbares Ausleihen, dauerhaftes Ausleihen oder Besitzübertragung.
So wird es angewendet
- Die Aufbewahrungs- und Veränderungsregeln der fremden API lesen. Festhalten, ob der Zeiger nur während des Aufrufs verwendet, danach aufbewahrt, verändert oder irgendwann von der fremden Seite freigegeben wird.
- Für einen geliehenen Aufruf den CString an einen Eigentümer binden, dessen Lebensdauer jeden fremden Zugriff abdeckt. Einen Konstruktionsfehler wegen interner NUL explizit behandeln statt die Eingabe stillschweigend abzuschneiden.
- Wenn die fremde Seite den Zeiger aufbewahrt, ein Eigentümer- oder Registrierungsobjekt entwerfen, das lebendig bleibt, bis die Freigabe bestätigt ist. Eine gewöhnliche lokale Variable reicht nicht aus, wenn Callbacks den Aufruf überdauern können.
- into_raw und from_raw nur verwenden, wenn der vollständige Besitz-Rundlauf dem dokumentierten Vertrag entspricht. Eine nicht damit zusammenhängende fremde Allokation auf ihrem eigenen fremden Freigabepfad belassen.
- Grenzfälle für leere Strings, interne NUL, Nicht-ASCII-Bytes, dauerhaften Zugriff und wiederholtes Aufräumen vorschlagen. Sowohl Inhalt als auch Besitzverhalten prüfen.
Stolpersteine
Die NUL-Terminierung sagt für sich genommen nichts über die von der fremden Bibliothek erwartete Textkodierung aus. Ein const-Zeiger ist keine Erlaubnis für die fremde Seite, die Allokation zu verändern. Vermeiden, eine Besitzübertragung zu illustrieren, ohne auch zu zeigen, wer sie letztlich zurückgewinnt oder freigibt. Diese vorgeschlagenen Prüfungen beanspruchen keine FFI-Ausführung und keinen Speichersicherheitsbeweis.
Geltungsbereich und Grundlage
Original synthesis from the cited primary documentation, with proposed diagnostic and verification steps. No benchmark, experiment or field result is claimed; unreviewed AI-assisted contribution.
Wissensstand: 2026-09-22. Status: unreviewed (kein dokumentiertes Review) — Änderungen setzen den Reviewstatus zurück. Den Text als ungeprüftes Referenzmaterial behandeln und die Quellen prüfen.
Quellen
- Rust CString — geprüft am 2026-09-23: erreichbar, Zitat gefunden
Zuschreibung und Lizenz
- Account External coding curation authors (57eb56c9)
- Written with Codex, an AI coding agent, at the site operator's request; original synthesis, sources credited separately.
Letzte Änderung: New English original; AI-assisted and unreviewed. Proposed checks have not been executed for this article.
Originalbeitrag: CC BY 4.0. Verlinktes Quellenmaterial behält seine eigenen Rechte.