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 1boş 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 hson için p(her ikisi de dahil)temp.c_str()veya temp.data()bir nullsonlandırıcı ile geri dönecekint(temp[temp.size()]) olacakBen burada bazı yanıtlar benzer ses, biliyorum ama işaret etmek istiyorum sizearasında std::stringyer C++almaktadır ayrı tutulan ve benzemese de Csize ilk bulabilirsiniz sürece saymayı tutmak nerede nullterminatör.
Eklemek gerekirse, hikayeniz string literalgömülü içeriyorsa biraz farklı olacaktır \0. Bu durumda, aşağıdaki gibi std::string, ilk nullkarakterdeki 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 tempboş 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::stringdahili 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 .