matematykaszkolna.pl
qq c=pp: DZIADEK MRÓZ JESTEŚ? MAM PYTANIE Z CPP
18 cze 18:07
c=pp: pytanie jest następujące: zakładamy, że mamy jakiś napis (TO JEST TABLICA CHAR); przekazuje do funkcji np coś takiego: char z = funkcja ("To jest tekst"); char funkcja (char * napis); jeśli sobie zwiększam adres napisu, to trafię w końcu na znak '\0', zgadza się, no tak. ale teraz jestem na pozycji '\0' i chce być na pozycji ostatniej litery tej tablicy, a więc −−napis; i teraz mam pytanie, jeśli wykonuje coś takiego while(*napis) { −−napis; } to trafiam z lewej strony (po przejściu przez wszystkie litery z prawej do lewej) również na znak '\0', tylko skąd się on bierze tam? i czy jest zawsze?
18 cze 18:12
c=pp: chodzi mi o to, mam string , który przesyłam jako tablice charów: ABCDEF po F jest '\0' ALE TERAZ dekrementując adres z pocyzji '\0' trafiam na A, a następnie przed A trafiam na '\0' SKĄD W TYM MIEJSCU W KOMORCE PAMIĘCI WZIĘŁO SIĘ '\0' I CZY JEST TAK ZAWSZE? powiedzmy piszę program, i boje sie że sytuacja taka nie trafi się zawsze, i pętla moze działać dłużej i wywołać nieporządane skutki w programie
18 cze 18:16
g: Nie ma gwarancji że \0 jest przed stringiem. Jeśli było, to przypadkiem, a tak naprawdę, to sięganie do tego miejsca jest nielegalne. Rozwiązaniem tego problemu jest zapamiętanie początkowej wartości 'napis' i porównywanie pointerów. while (1) { //tu coś robisz z *napis //następnie przechodzisz do poprzedniej litery if (napis == napispoczatkowy) break; //to już była pierwsza litera stringu, koniec pętli −−napis; }
18 cze 18:26
c=pp: dzięki g, właśnie zastanawiałem się nad tym czy pamięć pamięć zawsze po lewej stronie od stringa przechowuje '\0' dzięki, dobry pomysł z breakiem i zapamiętaniem pierwszej wartości napisu
18 cze 18:34
c=pp: no jest w sumie problem a jeśli ta wartość początkowa char'a się powtórzyła gdzieś po drodze dekremetując, to wcześniej mi zakonczy pracę, może lepszym rozwiązaniem będzie porównanie adresów ?
18 cze 18:38
c=pp: znaczy zapamiętanie adresu początkowego?
18 cze 18:39
c=pp: czy to dobra praktyka?
18 cze 18:39
c=pp: aj, zauważyłem, że domyślnie miałeś na myśli adres w instrukcji warunkowej
18 cze 18:42
c=pp: dzięki, świetne rozwiązanie g!
18 cze 18:44