char * - czyli C-String ustawianie wartości
Ostatnio zmodyfikowano 2013-03-11 20:25
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: 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 |
|
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 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 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ł 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 |
|
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: #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ś.. |
|
« 1 » |