Hej,
oto kod:
int main (void)
{
string s = "Marek";
printf("String %c, %c, %c, %c, %c \n", s[4], s[5], s[7], s[8], s[9]);
printf("Nazwa: %s\n", s);
}
Rozumiem, że s[5] to "\0", skąd się zatem biorą wartości dla s[7], s[8], s[9] itp?
Hej,
oto kod:
int main (void)
{
string s = "Marek";
printf("String %c, %c, %c, %c, %c \n", s[4], s[5], s[7], s[8], s[9]);
printf("Nazwa: %s\n", s);
}
Rozumiem, że s[5] to "\0", skąd się zatem biorą wartości dla s[7], s[8], s[9] itp?
Śmieci w pamięci. Bardziej formalnie, to co robisz to UB i ma prawo zdarzyć się wszystko. Włącznie z RCE albo formatem dysku twardego, choć w tym przypadku ciężko to sobie wyobrazić.
Wykład online zatytułowany - "memory", a że mnie zawsze ciekawi więcej niż mówią, to się równolegle z wykładem bawię. Śmieci - załóżmy, że na tym poziomie mi to wystarczy, aczkolwiek - skąd niby te śmieci się biorą? Cała pamięć, każdy bajt jest takimi śmieciami zapełniony (coś na zasadzie - natura nie znosi próżni?), od razu kolejne pytanie mi się nasunęło:
int main (void)
{
string s = "Marek";
printf("String %c, %c, %c, %c, %c \n", s[4], s[5], s[7], s[8], s[9]);
printf("Nazwa: %s\n", s);
printf("Lećmy dalej: %p\n", &s);
printf("Kolejny: %p, %p,\n", &s[0], &s[1]);
}
s[0] jest początkiem mojego stringa, s[1] jest logicznie - kolejnym bajtem stringa w pamięci i widać to po adresie hex, dlaczego zatem "&s" nie podaje wartości od której mój string się zaczyna, tylko zupełnie inną? Ma to jakieś proste wytłumaczenie, czy może specyfika pamięci/kompów i nie warto na moim poziomie zawracać sobie tym głowy?
PS. Dziękuję za szybką pomoc i odpowiedź !!
Coś w tej pamięci było wcześniej. Może inny program, może jakiś obiekt z tego programu. Kto wie. Koszt czyszczenia jest niezerowy, a z założenia pierw do obiektów coś przypisujesz zanim z nich czytasz, więc nie ma co się martwić o takie sytuacje.
string
jest klasą, jak chcesz adres pierwszego elementu, a nie obiektu klasy, to użyj &s[0]
Marek Budziński napisał(a):
Wykład online zatytułowany - "memory", a że mnie zawsze ciekawi więcej niż mówią, to się równolegle z wykładem bawię. Śmieci - załóżmy, że na tym poziomie mi to wystarczy, aczkolwiek - skąd niby te śmieci się biorą? Cała pamięć, każdy bajt jest takimi śmieciami zapełniony (coś na zasadzie - natura nie znosi próżni?), od razu kolejne pytanie mi się nasunęło:
...
s[0] jest początkiem mojego stringa, s[1] jest logicznie - kolejnym bajtem stringa w pamięci i widać to po adresie hex, dlaczego zatem "&s" nie podaje wartości od której mój string się zaczyna, tylko zupełnie inną? Ma to jakieś proste wytłumaczenie, czy może specyfika pamięci/kompów i nie warto na moim poziomie zawracać sobie tym głowy?
PS. Dziękuję za szybką pomoc i odpowiedź !!
Z ciekawych zabaw w tym zakresie, to Ci podrzucę:
adres obiektu string i literek ze stringa, dla stringu bardzo małego (<4) i duzego. Bardzo mgliście kojarzę, może coś mylę, że malutkie stringi są/bywały upychane "in-place", a duże alokowane. WIęc gdyby tak było, dla malutkich byłyby to podobne adresy, i odległe dla przeciwnego przypadku.
Zdecudyj się na język.
AnyKtokolwiek napisał(a):
- Zdecudyj się na język.
- Do latania po adresach C jest bardziej adekwatny.
- w C++ co do pamięci można zgłębić wszystkie opcje operatora new, Alokatorów itd...
Jestem samoukiem, zdecydowałem się dokończyć kurs CS50, gdyż prowadzący ciekawie i dość przejrzyście tłumaczy pojęcia jak bity, bajty, zmienne, takiemu laikowi jak ja. Jestem w połowie :D (to oznaka dumy), skończę zrobię kolejny kurs z C++, potem kolejny z Pythona, potem kolejny ze SQLa, potem zrobię pętlę raz jeszcze, i dopiero mając takie podstawy zacznę myśleć o ?sepcjalizacji?
A skoro już o tym rozmawiamy - osobiście mam wykształcenie matematyczne, ale z programowaniem jw. zaczynam przygodę - kurs 1,5 godzinny oglądam w 6 godzin co chwila googlując nowe pojęcia, które póki co są dla mnie intuicyjne, a nie "wykute", zrozumiałe bez zająknięcia.
Docelowo - chciałbym popracować trochę w korpo zdobyć doświadczenie, a za kilka lat mieć możliwość pracy zdalnej (to jest mój główny cel). Jakieś może wskazówki co do tego planu?