2014-10-11 24 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; 
} 

C++ çıktısını alabilirsiniz endeksi 0 eleman boş bir dize boş bir dize, neden bir elemana sahip olabilir s [0]? Benim düşünceme göre, bir çalışma zamanı hatası almalısınız. Bir kongre mi yoksa başka bir şey mi?neden <strong>s</strong> gibi

cevap

4

adresine n adresinin s uzunluğuna erişebileceğiniz özel bir kural vardır. Sonuç, null bir karakterdir (yani, karakter türünün değerini ilklendiren değerden kaynaklanır) ve değiştirilmeye çalışılırken tanımlanmamış davranışlara neden olur.

+0

Bunun bir mantık için [n] 'yapmasının mantığı, char [n + 1]' olarak uygulanan C stili bir dizeye benzer davranır mı? – Barmar

+0

@Barmar Sanırım bunun gibi bir şey. Detaylı mantık muhtemelen bir yerde bulunabilir, ancak kazmak için çok tembelim. – Brian

+0

@Deduplicator, evet, bu §21.4.5 [string.access] – quantdev

İlgili konular