Czy std::string jest zakończony znakiem null?
Ostatnio zmodyfikowano 2012-03-29 12:41
xaoc Temat założony przez niniejszego użytkownika |
Czy std::string jest zakończony znakiem null? » 2012-03-27 21:25:12 Witam, Czy string tak jak C-string jest zakończony znakiem null? |
|
jsc |
» 2012-03-27 21:28:33 Nie. |
|
DejaVu |
» 2012-03-28 08:28:35 Każdy łańcuch znaków jest zakończony znakiem terminalnym ( znak terminalny). W przypadku gdy napiszesz:
std::string x = "123"; printf( "%s\n", x.c_str() );
to łańcuch znaków zwracany przez metodę c_str() będzie zakończony znakiem terminalnym. |
|
akwes |
» 2012-03-28 17:02:51 Yyyy Może się mylę, ale wydaje mi się że zapis "a" oznacza (w przeciwieństwie do 'a') znak a oraz NULL. #include <conio.h> #include <iostream>
int main() { std::string a = "x"; if( a[ 0 ] == '\0' ) std::cout << "TAK "; else std::cout << "NIE "; if( a[ 1 ] == '\0' ) std::cout << "TAK "; else std::cout << "NIE "; if( a[ 2 ] == '\0' ) std::cout << "TAK "; else std::cout << "NIE "; _getch(); }
NIE TAK NIE
Nie widzę też odporności na znak '\0' #include <conio.h> #include <iostream>
int main() { std::string a = "x\0aasfdasdsadsa"; std::cout << a.size(); _getch(); }
1
|
|
malan |
» 2012-03-28 17:06:46 Yyy... może się mylę, ale po pierwszym NIE program się wywali... |
|
akwes |
» 2012-03-28 17:07:58 Dlaczego :P? To tylko odczytanie wartości. String i tak alokuje więcej miejsca więc nic złego nie czytam.// edit, wykreślenie bzdury // jestem skłonny uwierzyć, że tam nie ma znaku NULL, ciekawi mnie jednak temat :) // haha, nie rozumiem jak działa string. #include <conio.h> #include <iostream>
int main() { char tab[ 1 ]; tab[ 0 ] = 'a'; std::string str( tab ); std::cout << "Rozmiar = " << str.size(); std::cout << '\n' << int( str[ str.size() - 1 ] ) << "<---"; std::cout << '\n' << int( str[ 2 ] ) << "<---"; char tab2[ 2 ] = { 'a', '\0' }; std::string str2( tab2 ); std::cout << "\nRozmiar = " << str2.size(); _getch(); }
2 -128<--- 0<--- 1
|
|
Chlorek |
» 2012-03-28 18:03:23 Znak pusty na logikę - musi być. Pomaga on w zarządzaniu wartościami. Poza tym wykonując kilka testów widzę, że ten znak "pusty" jest. |
|
akwes |
» 2012-03-28 18:08:25 Ale wszędzie w internecie piszą, że go nie ma :) |
|
« 1 » 2 |