Namensräume
Varianten
Aktionen

std::basic_string<CharT,Traits,Allocator>:c_str

Von cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
const CharT* c_str() const;
(noexcept seit C++11)
(constexpr seit C++20)

Gibt einen Zeiger auf ein nullterminiertes Zeichenarray zurück, dessen Daten mit denen in der Zeichenkette übereinstimmen.

Der Zeiger ist so beschaffen, dass der Bereich [c_str()c_str() + size()] gültig ist und die Werte darin mit den in der Zeichenkette gespeicherten Werten mit einem zusätzlichen Nullzeichen nach der letzten Position übereinstimmen.

Der von c_str() erhaltene Zeiger kann ungültig werden durch

  • Übergabe einer nicht-const Referenz auf die Zeichenkette an eine beliebige Standardbibliotheksfunktion, oder
  • Aufruf von nicht-const Mitgliedsfunktionen auf der Zeichenkette, ausgenommen operator[], at(), front(), back(), begin(), rbegin(), end() und rend()(seit C++11).

Das Schreiben in das über c_str() zugängliche Zeichenarray ist undefiniertes Verhalten.

c_str() und data() führen dieselbe Funktion aus.

(seit C++11)

Inhalt

[edit] Parameter

(keine)

[edit] Rückgabewert

Zeiger auf den zugrunde liegenden Zeichenspeicher.

c_str()[i] == operator[](i) für jedes i in [0size()).

(bis C++11)

c_str() + i == std::addressof(operator[](i)) für jedes i in [0size()].

(seit C++11)

[edit] Komplexität

Konstant.

[edit] Anmerkungen

Der von c_str() erhaltene Zeiger kann nur als Zeiger auf eine nullterminierte Zeichenkette behandelt werden, wenn das Zeichenkettenobjekt keine weiteren Nullzeichen enthält.

[edit] Beispiel

#include <algorithm>
#include <cassert>
#include <cstring>
#include <string>
 
extern "C" void c_func(const char* c_str)
{
    printf("c_func called with '%s'\n", c_str);
}
 
int main()
{
    std::string const s("Emplary");
    const char* p = s.c_str();
    assert(s.size() == std::strlen(p));
    assert(std::equal(s.begin(), s.end(), p));
    assert(std::equal(p, p + s.size(), s.begin()));
    assert('\0' == *(p + s.size()));
 
    c_func(s.c_str());
}

Ausgabe

c_func called with 'Emplary'

[edit] Siehe auch

(DR*)
greift auf das erste Zeichen zu
(public member function) [edit]
(DR*)
greift auf das letzte Zeichen zu
(public member function) [edit]
gibt einen Zeiger auf das erste Zeichen eines Strings zurück
(public member function) [edit]