Liefert std :: string :: c_str () immer eine nullterminierte Zeichenkette? [Duplikat]

8

Ich benutze strncpy(dest, src_string, 32) , um std::string in char[32] zu konvertieren, damit meine C ++ Klassen mit altem C-Code arbeiten. Aber liefert die Methode c_str() von std :: string immer eine mit Null beendete Zeichenkette?

    
ezpresso 02.10.2012, 20:29
quelle

3 Antworten

20
  

Liefert die Methode c_str () von std :: string immer eine mit Null beendete Zeichenkette?

Ja.

Die Spezifikation lautet:

  

Rückgabewert: Ein Zeiger p , so dass p + i == &operator[](i) für jeden i in [0,size()] .

Beachten Sie, dass der für i angegebene Bereich geschlossen ist, sodass size() für einen gültigen Index steht, der sich auf das Zeichen nach dem Ende der Zeichenfolge bezieht.

operator[] wird so angegeben:

  

Rückgabe: *(begin() + pos) if pos < size() , ansonsten eine Referenz auf ein Objekt vom Typ T mit Wert charT()

Im Fall von std::string , das ein Alias ​​für std::basic_string<char> ist, so dass charT für char steht, hat ein wertkonstruiertes char den Wert null; daher ist das Zeichenfeld, auf das das Ergebnis von std::string::c_str() zeigt, null-terminiert.

    
Mike Seymour 02.10.2012, 20:31
quelle
11

c_str gibt eine "C-Zeichenfolge" zurück. Und C-Strings enden immer mit einem Nullzeichen. Dies ist C-Standard.

Keine abschließenden Zeichenfolgen.

    
Lews Therin 02.10.2012 20:33
quelle
1

Nach diesem lautet die Antwort ja.

    
fbrereto 02.10.2012 20:31
quelle

Tags und Links