-
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
- Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- Pendrive zdycha, czy coś jeszcze innego? Problem z plikami.
- Odkurzacz Smapp Dynamic - dawny Zelmer
- Nagra IV i zewnętrzny pilot
- Fejk muzyczny czy nie fejk
- Raspberry Pi 3 Model B+
- Kuchenka elektryczna
- test
- Cewka elektrozaworu
- zapytanie o chip r5f21275nfp
- nie naprawiam więcej telewizorów
- Zrobił TV OLED z TV LCD
- Zasilacz USB na ścianę.
- Gniazdo + wtyk
- Aliexpress zaczął oszukiwać na bezczelnego.
Najnowsze wątki
- 2025-03-20 Re: Dlaczego tak odstają od Tesli?
- 2025-03-20 Greenpeace została zobowiązana do zapłaty niemal 667 mln dolarów [USA,wyrok sądu]
- 2025-03-20 Re: Dlaczego tak odstają od Tesli?
- 2025-03-19 Brak ograniczeń dla chińskiego kapitału - wam nie do rządu, tylko na zmywak do chińskiej knajpy!!!
- 2025-03-19 Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- 2025-03-19 szal-Unia == federacja policyjna
- 2025-03-19 Polsza == państwo policyjne
- 2025-03-19 Grzegorz Płaczek o programie szczepień dzieci. ,,Stworzono eldorado dla firm farmaceutycznych"
- 2025-03-19 Wietnam wykłada 500M$ i chce zbudować fabrykę za 50G$
- 2025-03-19 Gemini
- 2025-03-19 Mokry sen Zenka :)
- 2025-03-19 Re: Dlaczego tak odstają od Tesli?
- 2025-03-19 Czy grupa p.s.prawo przetrwa najbliższe wybory (prezydenta)?
- 2025-03-19 Warszawa => Frontend Developer (obszar Angular13+) <=
- 2025-03-19 Czy "niedopuszczony pełnomocnik" jest w prawie się na to skarżyć jak "świadek" zmarła bez zostawienia mu takiej instrukcji?