4 Stimmen

Hat jemand einen Ersatz für string.h mit einer Struktur zum Speichern der Zeichenfolge und Länge implementiert?

In der C-Standardbibliothek werden Zeichenketten durch ein Array von Zeichen implementiert, das durch ein Nullzeichen abgeschlossen wird: ' \0 '. Solche ASCIZ-Zeichenketten führen zu Ineffizienz, weil wir jedes Mal, wenn wir die Länge einer Zeichenkette wissen müssen, diese iterieren müssen, um nach ' \0 '.

Dies kann umgangen werden, indem die Länge der Zeichenkette bei der Erstellung gespeichert wird, z. B. durch Verwendung einer Struktur wie folgt:

typedef struct cstring_ {
    size_t nchars;
    char chars[0];
} cstring;

Hat jemand eine freigegebene Bibliothek, die die string.h-Funktionen implementiert, aber mit einer Struktur anstelle von char * Schnüre weitergeben?

Wenn nicht, gibt es einen bestimmten Grund, warum dies eine schlechte Idee wäre?

0voto

Andrei Punkte 4800

Immer wenn ich die Länge einer "Zeichenkette" benötige, muss ich eigentlich wissen, ob die Zeichenkette leer ist oder ob ich ihr Ende erreicht habe. In anderen Fällen muss ich ohnehin durch die Zeichen iterieren, sodass ich genauso gut auf NULL prüfen kann.

Lassen Sie mich also Ihre Frage umformulieren: Gibt es einen bestimmten Grund, warum Sie glauben, dass dies eine besser Idee?

0voto

Chen Zhuo Punkte 61

Ich glaube nicht, dass es eine schlechte Idee ist, eigentlich die C++-Implementierung von String ist genau wie Sie sagte. Und es gibt auch c-Implementierung wie gstring in glib. Es ist fast eine Standardbibliothek in der Linux-Welt. Ich denke, der Grund, warum es keine Standard-C-Lib ist, ist, dass C-Lang eine zu lange Geschichte hat und die meisten Entwickler und Projekte sind daran gewöhnt, orignal C-Stil String.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X