String::c_str() artık boş C 11'de sonlandırıldı?
C 11 basic_string::c_str tanımlanmış olmak tam olarak aynı basic_string::data, hangi sırayla tanımlı olmak tam olarak aynı *(begin() n) *(&*begin() n) (0 <= n < size()).
Ben her zaman onun dize sonuna bir boş karakter olmasını gerektiren bir şey bulmak.
Bu c_str() artık boş sonlandırılmış bir dize üretmek için garantili anlamına mı geliyor?
CEVAP
Dizeleri şimdi boş sonlandırılmış tamponlar DAHİLİ olarak kullanmak için gereklidir. operator[] (21.4.5)bu: tanım
Gerektirir:
pos <= size().Verir:
pos < size(), başka türde bir nesne başvurusu varsa*(begin() pos)Tdeğeri ilecharT(); referans değeri değiştirilemez.
Geri c_str (21.4.7.1/1), operator[] açısından tanımlanmış olduğunu görüyoruz:
Verir:
[0,size()]16 *herp i == &operator[](i)böyle bir işaretçip.
c_str data hem O olmak için gerekli(1), uygulanması etkin bir şekilde sonlandırılmış tamponlar kullanmak zorunda kalır.
Ayrıca, David RodrÃguez - dribeas iÅŸaret açıklamalarda, dönüş deÄŸeri ÅŸartı da demek kullanabileceÄŸiniz &operator[](0) eÅŸanlamlı c_str(), sonlandırıcı boÅŸ karakter olmalı yalan aynı tampon (beri *(p size()) eÅŸit olmalıdır charT()); bu da demek oluyor ki bile Terminatör baÅŸlatıldığını tembel, mümkün olmadığını gözlemlemek tampon Ara devlet.
