Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czy std::string jest zakończony znakiem null?

Ostatnio zmodyfikowano 2012-03-29 12:41
Autor Wiadomość
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?
C/C++
string x;
x = "a";
P-53317
jsc
» 2012-03-27 21:28:33
Nie.
P-53319
DejaVu
» 2012-03-28 08:28:35
Każdy łańcuch znaków jest zakończony znakiem terminalnym (» Dokumentacjaznak terminalny). W przypadku gdy napiszesz:
C/C++
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.
P-53336
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.

C/C++
#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'

C/C++
#include <conio.h>
#include <iostream>

int main()
{
    std::string a = "x\0aasfdasdsadsa";
    std::cout << a.size();
    _getch();
}


1
P-53356
malan
» 2012-03-28 17:06:46
Yyy... może się mylę, ale po pierwszym
NIE
 program się wywali...
P-53357
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.

C/C++
#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
P-53358
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.
P-53373
akwes
» 2012-03-28 18:08:25
Ale wszędzie w internecie piszą, że go nie ma :)
P-53374
« 1 » 2
  Strona 1 z 2 Następna strona