Aşağıdaki dize boş sonlandırıcı '\ 0' içerecek mi?
std::string temp = "hello whats up";
Teşekkürler! :)
Aşağıdaki dize boş sonlandırıcı '\ 0' içerecek mi?
std::string temp = "hello whats up";
Teşekkürler! :)
Yanıtlar:
Hayır, ancak temp.c_str()
boş bir sonlandırıcı derseniz bu yöntemin getirisine dahil edilecektir.
Diğer herhangi bir karakter gibi bir dizeye boş bir karakter ekleyebileceğinizi de söylemeye değer.
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
baskılar
5 5
ve 5 1
boş karakterlerin dizeler için özel bir anlamı varsa beklediğiniz gibi değil .
temp.c_str()
Boş karakter ararsanız dahil edilecektir. Dizede gerçekten ihtiyacınız varsa, onu diğer herhangi bir karakter gibi ekleyin. temp.push_back('\0')
. Şimdi iki boş karakter temp.c_str()
içerecek .
C ++ 03'te değil ve C ++ 11'den önce bile bir C ++ std :: string'in bellekte sürekli olduğu garanti edilmez. Yalnızca C dizeleri (dizeleri depolamak için tasarlanmış char dizileri) boş sonlandırıcıya sahipti.
C ++ 11 ve daha sonra mystring.c_str()
eşdeğerdir mystring.data()
eşdeğerdir &mystring[0]
ve mystring[mystring.size()]
olması sağlanır '\0'
.
Bu, buradaki "içerme" tanımınıza bağlıdır. İçinde
std::string temp = "hello whats up";
dikkat edilmesi gereken birkaç nokta var:
temp.size()
İlk gelen karakter sayısını döndürür h
son için p
(her ikisi de dahil)temp.c_str()
veya temp.data()
bir null
sonlandırıcı ile geri dönecekint(temp[temp.size()])
olacakBen burada bazı yanıtlar benzer ses, biliyorum ama işaret etmek istiyorum size
arasında std::string
yer C++
almaktadır ayrı tutulan ve benzemese de C
size ilk bulabilirsiniz sürece saymayı tutmak nerede null
terminatör.
Eklemek gerekirse, hikayeniz string literal
gömülü içeriyorsa biraz farklı olacaktır \0
. Bu durumda, aşağıdaki gibi std::string
, ilk null
karakterdeki durakların oluşturulması :
std::string s1 = "ab\0\0cd"; // s1 contains "ab", using string literal
std::string s2{"ab\0\0cd", 6}; // s2 contains "ab\0\0cd", using different ctr
std::string s3 = "ab\0\0cd"s; // s3 contains "ab\0\0cd", using ""s operator
Referanslar:
Evet, ararsanız temp.c_str()
, boş sonlandırılmış c-string'i döndürecektir.
Bununla birlikte, nesnede depolanan gerçek veriler temp
boş sonlandırılmış olmayabilir, ancak önemli değildir ve programcı için önemli olmamalıdır, çünkü o zaman programcı istediğinde const char*
, c_str()
nesneyi çağırır ve bu da boş değer döndürmesi garantilidir. -sonlu dize.
temp.size()
.
std::string
dahili olarak karakter sayısını tutar. Dahili olarak bu sayımı kullanarak çalışır. Diğerlerinin de söylediği gibi, dizgeye gösterim için ihtiyaç duyduğunuzda veya herhangi bir nedenle, c_str()
sonunda boş sonlandırıcı olan dizeyi verecek yöntemini kullanabilirsiniz .