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

char * - czyli C-String ustawianie wartości

Ostatnio zmodyfikowano 2013-03-11 20:25
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
char * - czyli C-String ustawianie wartości
» 2013-03-11 18:49:24
Hmm kiedyś to tłumaczyliście ale nie powiedzieliście dlaczego tak jest a mianowicie, kiedy tworze sobie C-String:
char * ciag_znakow;
To tworze wskaźnik, jednak dopuszczalne jest to:
C/C++
char * ciag_znakow;
ciag_znakow = "costamcostamcostam";
Jest to dziwne bo powinno być raczej z użyciem operatora new. Nie czaje tego. To tak jakby adres ustawiać na "costamcostamcostam" o.O
P-78117
ison
» 2013-03-11 19:31:13
"costam" to nie jest ciąg znaków, tylko wskaźnik na komórkę tablicy o stałym rozmiarze zawierającą pierwszy znak tekstu

zatem
C/C++
char str[ 5 ];
str = "abcd";
nie skompiluje się, gdyż zarówno str jak i "abcd" są tablicami o stałym rozmiarze, a przypisywanie tablic w ten sposób jest niedozwolone

taka tablica może być jednak inicjalizowana literałem c-stringa
C/C++
char str[ 5 ] = "abcd";
w tym przypadku będzie OK, str nie będzie jednak wskazywał na oryginalną pozycję stringa "abcd", będzie przechowywał jego kopię


"costamcostamcostam" jest wskaźnikiem,
jak przypisujesz do wskaźnika to co zwróci new to także przypisujesz wskaźnik,
powinno być raczej z użyciem operatora new
jakbyś napisał
C/C++
char * ciag_znakow = new char[ 5 ];
ciag_znakow = "abcd";
to i tak byś stracił to co zwrócił new, bo byś zastąpił wskaźnikiem z "abcd"

literał "" zwraca wskaźnik na stałą tablicę (stałe elementy), więc i tak poprawnie powinieneś napisać
const char * ciag_znakow = "abcd";

literały 'żyją' do końca działania programu
P-78121
pekfos
» 2013-03-11 20:25:58
To tak jakby adres ustawiać na "costamcostamcostam" o.O
Dokładnie. "costamcostamcostam" to adres stringa o treści "costamcostamcostam". Przykładzik:
C/C++
#include <iostream>

int main()
{
    std::cout << std::hex << reinterpret_cast < long >( "costam" );
}
Zauważ, że nie ma konwersji std::string na long, czy co tam sobie myślałeś..
P-78125
« 1 »
  Strona 1 z 1