StrPut() [AHK_L 46+]

Kopiert eine Zeichenkette auf eine Speicheradresse unter Beachtung eines bestimmten Zeichensatzes.

StrPut(Zeichenkette , Codierung := Keine)
StrPut(Zeichenkette, Ziel , Länge , Codierung := Keine)

Parameter

Zeichenkette

Eine beliebige Zeichenkette. Wenn eine Zahl angegeben ist, wird sie automatisch in eine Zeichenkette umgewandelt.

Zeichenkette wird standardmäßig in der nativen Codierung vermutet.

Ziel

Die Speicheradresse, auf der die Zeichenkette geschrieben werden soll.

Hinweis: Bei einer Konvertierung zwischen Zeichensätzen kann die erforderliche Pufferspeichergröße von der Größe der Quellzeichenkette abweichen. In solchen Fällen können Sie StrPut mit zwei Parametern aufrufen, um die erforderliche Größe zu berechnen.

Länge

Die maximale Anzahl der zu schreibenden Zeichen, einschließlich des Null-Terminators, falls notwendig.

Wenn Länge 0 oder kleiner als die nach der Konvertierung voraussichtliche Länge (oder die Länge der Quellzeichenkette, wenn die Konvertierung nicht erforderlich ist) ist, wird keine Zeichen geschrieben.

Länge darf nicht weggelassen werden, es sei denn, man weiß, dass die Pufferspeichergröße ausreicht, z. B. wenn der Pufferspeicher basierend auf einen vorherigen Aufruf von StrPut, das die gleiche Quelle und Codierung hat, reserviert wurde.

Hinweis: Wenn Codierung angegeben ist, sollte Länge mit der Pufferspeichergröße übereinstimmen (in Zeichen), nicht mit der Länge der Zeichenkette oder einer Teilzeichenkette, da sie bei der Konvertierung eventuell länger gemacht wird.

Hinweis: Länge und der Rückgabewert von StrPut wird in Zeichen gemessen, während Pufferspeichergrößen normalerweise in Bytes gemessen werden.

Codierung

Die Zielcodierung; zum Beispiel: "UTF-8", "UTF-16" oder "CP936". Bei numerischen Identifikatoren kann das Präfix "CP" nur weggelassen werden, wenn Länge angegeben ist. Geben Sie eine leere Zeichenkette oder "CP0" an, um den Standard-ANSI-Zeichensatz des Systems zu nutzen.

Rückgabewert

Diese Funktion gibt die Anzahl der geschriebenen Zeichen zurück. Wenn kein Ziel angegeben wurde, wird die erforderliche Pufferspeichergröße in Zeichen zurückgegeben. Wenn Länge exakt mit der Länge der umgewandelten Zeichenkette übereinstimmt, ist die Zeichenkette nicht null-terminiert; andernfalls beinhaltet die zurückgegebene Größe den Null-Terminator.

Fehlerbehandlung

Es wird eine leere Zeichenkette zurückgegeben, wenn ungültige Parameter erkannt werden oder die Konvertierung nicht durchgeführt werden kann. Wenn die endgültige Anzahl der Zeichen Länge überschreitet, ist der Rückgabewert 0.

Bemerkungen

Beachten Sie, dass der Zeichenkette-Parameter immer davon ausgeht, die native Codierung der aktuell genutzten Version von AutoHotkey zu verwenden, wohingegen Codierung die Codierung der auf das angegebene Ziel geschriebenen Zeichenkette spezifiziert. Wenn keine Codierung angegeben ist, wird die Zeichenkette gemessen oder kopiert, ohne dass eine Umwandlung stattfindet.

Siehe auch

Zeichenkettencodierung, StrGet(), Skript-Kompatibilität, FileEncoding, DllCall(), VarSetCapacity()

Beispiele

#1: Es ist möglich, Länge oder Codierung direkt nach Ziel anzugeben, aber in diesem Fall muss Codierung nicht-numerisch sein:

StrPut(Zkette, Adresse, "cp0")  ; Zeichensatz 0, unbestimmte Pufferspeichergröße
StrPut(Zkette, Adresse, n, 0)   ; Maximal n Zeichen, Zeichensatz 0
StrPut(Zkette, Adresse, 0)      ; Nicht unterstützt (maximal 0 Zeichen)

#2: StrPut kann einmal aufgerufen werden, um die erforderliche Pufferspeichergröße für eine Zeichenkette in einer bestimmten Codierung zu berechnen, und danach nochmal, um die Zeichenkette zu codieren und sie in den Pufferspeicher zu schreiben. Um diesen Vorgang zu vereinfachen, können Sie die folgende Funktion in Ihre Bibliothek aufnehmen:

StrPutVar(Zeichenkette, ByRef Var, Codierung)
{
    ; Kapazität gewährleisten.
    VarSetCapacity(Var, StrPut(Zeichenkette, Codierung)
        ; StrPut gibt die Zeichenanzahl zurück, aber VarSetCapacity benötigt Bytes.
        * ((Codierung = "utf-16" || Codierung = "cp1200") ? 2 : 1) )
    ; Kopiert oder wandelt die Zeichenkette um.
    return StrPut(Zeichenkette, &Var, Codierung)
}