-
Data: 2022-08-27 12:59:42
Temat: Re: C - łańcuchy tekstowe definiowane w parametrach funkcji
Od: Atlantis <m...@w...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 27.08.2022 10:28, Dawid Rutkowski wrote:
> Przy wywołaniu send("tekscik"), gdy send(const char *aArg),
> "tworzony" jest zarówno wskaźnik aArg jak i anonimowa tablica z zawartością
"tekscik".
> I obie te zmienne mają czas życia do zakończenia wywołania tej funkcji.
Tutaj nie masz racji, a przynajmniej opisywane przez Ciebie zachowanie
nie jest żadną uniwersalną regułą. Nie ma żadnej zasady która mówiłaby,
że anonimowa tablica jest tworzona na stosie tuż przed utworzeniem
wskaźnika, który by na nią wskazywał.
Takie ciągi znaków zwykle są zbierane podczas kompilacji i umieszczone w
rodata (czyli w przypadku mikrokontrolerów najczęściej we flashu) i
potem po prostu wskaźnik będzie inicjowany wartością wskazującą na
początek odpowiedniego ciągu znaków.
Widać to chociażby w HEX-ach wsadów do starszych systemów
mikroprocesorowych (Z80, 8051) gdzie wszystkie teksty są zebrane w
jednym miejscu.
Problemy pojawiają się w przypadku niektórych architektur, gdzie
kompilator (o ile nie poinformujemy go, by robił inaczej) będzie przy
starcie programu kopiował dane do RAM-u, bo wskaźnik na dane w RAM-ie i
we flashu to nie to samo. Nawet wtedy ciągle jednak będą one istniały
cały czas w formie zmiennych globalnych, a nie zostanę ulokowane na stosie.
Moje pytanie odnosiło się do czegoś innego - chciałem się upewnić, czy
przypadkiem w pewnych sytuacjach program w sposób niejawny nie zrobi mi
niespodzianki i np. zamiast użyć wskaźnika wprost do ciągu w rodata w
sposób niejawny nie wygeneruje tymczasowego tekstu na stosie, złożonego
z fragmentów innych tekstów, w ramach optymalizacji.
> A co do send(const char *aArg)
> to nigdy nie potrafiłem zapamiętać, czy zabronione jest zmienianie
> wartośvi aArg czy też wartości wskazywanej...
w przypadku const char* masz do czynienia ze wskaźnikiem na const char.
Czyli nie wolno ci modyfikować wartości na którą wskazuje wskaźnik, ale
już sam wskaźnik możesz modyfikować. Zabronione jest *aArg='a', ale już
jak najbardziej wykonasz aArg++. Bez tego nie byłoby przecież możliwe
iterowanie po łańcuchach tekstowych w formie const char*.
W C istnieją też wskaźniki char* const - w tym przypadku możesz
modyfikować zawartość, ale już nie wolno zmienić adresu na który
wskazuje wskaźnik.
Dostępna jest też najbardziej restrykcyjna kombinacja: const char* const
- ani nie zmodyfikujesz wartości, ani adresu na który wskazuje wskaźnik.
Następne wpisy z tego wątku
- 27.08.22 15:59 Dawid Rutkowski
- 27.08.22 16:06 Dawid Rutkowski
- 27.08.22 16:53 J.F
- 27.08.22 20:30 a...@m...uni.wroc.pl
- 27.08.22 20:55 JDX
- 27.08.22 21:43 Dawid Rutkowski
- 28.08.22 12:34 JDX
- 28.08.22 14:27 Dawid Rutkowski
- 28.08.22 14:30 Atlantis
- 29.08.22 07:29 JDX
- 29.08.22 10:25 Krzysztof Gajdemski
Najnowsze wątki z tej grupy
- Hiszpania bez pradu
- amperomierz w plusie
- 3G-nadal działa
- Historia pewnego miernika kalibratora
- Ustym 4k Pro i wyświetlacz
- Czemu rozwaliło celę?
- Wojna w portfelu
- Jaki trojfazowy licznik tuya lub podobny?
- Problem z dekoderem adresów
- Intel się wyprzedaje: po 10latach pchnęli pakiet kontrolny Altery za 1/4 kwoty zakupu
- Korekcja perspektywy
- Wentylator zabija zasilacze LEDek?
- Re: Kompensacja mocy biernej przy 230VAC
- Totaliztyczny obowiązek naprawy maszyn i urządzeń
- Niby uziom ale nie
Najnowsze wątki
- 2025-05-02 Wrocław => Controlling systems Consultant <=
- 2025-05-02 Kraków => Programista MS Dynamics 365BC/NAV <=
- 2025-05-02 Kraków => Koordynator Produkcji / Przedstawiciel ds. rozwoju produktu
- 2025-05-02 Warszawa => Spedytor Międzynarodowy <=
- 2025-05-02 Białystok => NMS System Administrator <=
- 2025-05-02 Warszawa => Sales Director (Cloud solutions) <=
- 2025-05-02 Czy na URZĘDACH RP3 można bezkarnie LATAMI wywieszać flagę obcego państwa? [podstawa prawna]
- 2025-05-02 tona telefonów komórkowych kryje ok. 3,5 kilograma srebra, 360 gramów złota i 280 gramów palladu.
- 2025-05-01 Jak zbudować Perpetum Mobile
- 2025-05-01 Wybory ten wygra kto odzyska TEPS'ę od Kulczyka
- 2025-04-30 Czy wymieniacie fotel kierowcy, gdy kupujecie używanego gruchota po prostacie i nietrzymaniu moczu ?
- 2025-05-02 dewastują Tesle
- 2025-05-02 jadę do państwa polskiego
- 2025-05-01 zachowaj odstęp
- 2025-04-30 Czy wymieniacie fotel kierowcy, gdy kupujecie używanego gruchota po prostacie