Heim >Backend-Entwicklung >C++ >Wie kann ich in C einen „std::string' mit eingebetteten Nullzeichen erstellen?

Wie kann ich in C einen „std::string' mit eingebetteten Nullzeichen erstellen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-29 08:06:10700Durchsuche

How Can I Create a `std::string` Containing Embedded Null Characters in C  ?

Erstellen eines std::string mit einer eingebetteten Null: Eine eingehende Untersuchung

Beim Erstellen eines std::string aus einem String-Literal, das eine eingebettete Null enthält B. „std::string my_string(“a\0b“);“, darf nur das erste Zeichen in der resultierenden Zeichenfolge vorhanden sein. Um dieser Herausforderung zu begegnen, können je nach verwendeter C-Version verschiedene Ansätze verwendet werden.

C 14 und höher

Ab C 14 erhielten String-Literale die Fähigkeit, Zeichen darzustellen, die eingebettete Nullen umfassen . Durch Anhängen des Suffixes „s“ an ein String-Literal kann es als std::string-Literal und nicht als C-String-Literal behandelt werden. Zum Beispiel:

std::string s = "pl-<pre class="brush:php;toolbar:false">std::string   x("pq\0rs");   // Two characters because input assumed to be C-String
std::string   x("pq\0rs",5); // 5 Characters as the input is a char array with 5 characters.
-op"s; // Notice the "s" at the end.

Lösungen vor C 14

Vor C 14 geht der std::string-Konstruktor, der ein char* akzeptiert, davon aus, dass die Eingabe ein C-String ist, was der Fall ist nullterminiert. Zum Ausgleich muss ein anderer Konstruktor verwendet werden, der ein char-Array und seine Länge akzeptiert:

Es ist wichtig zu beachten, dass std::string in C im Gegensatz zu C-Strings nicht nullterminiert ist. Die c_str()-Methode kann jedoch einen Zeiger auf einen internen Puffer bereitstellen, der eine nullterminierte C-String-Darstellung enthält.

Das obige ist der detaillierte Inhalt vonWie kann ich in C einen „std::string' mit eingebetteten Nullzeichen erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn