2014-10-11 11 views
6
#include<iostream> 
#include<string> 

using std::string; 
using std::cout; 
using std::endl; 

int main() 
{ 
    string s; 
    cout << s.size() << endl; 
    cout << s[0] << endl; //output empty line 
    return 0; 
} 

Jak s jest pusty ciąg znaków, dlaczego to ma element s [0]? Moim zdaniem, powinien otrzymać błąd czasu wykonywania. Czy to konwencja czy cokolwiek innego?dlaczego pusty łańcuch może wyjście indeksu 0 elementem w C++

Odpowiedz

4

Istnieje specjalna zasada, że ​​można uzyskać dostęp do s[n], gdzie n jest długość s. Wynikiem jest znak null (, tj. , wartość wynikająca z inicjowania wartości typu znaku) i próba modyfikacji powoduje niezdefiniowane zachowanie.

+0

Czy to uzasadnienie sprawia, że ​​'s [n]' dla łańcucha działa podobnie do łańcucha w stylu C zaimplementowanego jako 'char [n + 1]'? – Barmar

+0

@Barmar Wyobrażam sobie, że to coś takiego. Szczegółowe uzasadnienie może być gdzieś znalezione, ale jestem zbyt leniwy, aby go szukać. – Brian

+0

@Deduplicator, tak, to §21.4.5 [string.access] – quantdev

Powiązane problemy