C - ukazatele, zjištění délky pole

Od: Datum: 30.12.14 18:18 odpovědí: 3 změna: 31.12.14 01:38

Zdravím, lze nějak zjistit velikost statického pole předaného přes ukazatel v C?
Mám:
char *pole[]={"prvek1","prvek2"};
int *p;
p = pole;

A pokud zavolám funkci sizeof(pole) dostanu výsledek 14 a to když podělím sizeof(pole[0]) mám 2.

Ale pokud zavolám sizeof(p) dostanu velikost pointru, tedy 4. Lze i takhle nějak zjistit velikost pole?


Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Od: hm®
Datum: 30.12.14 19:26
avatar

Zajímavé. Moje gcc na sizeof(pole) vypíše 8 (velikost dvou ukazatelů). A nepodařilo se mi ho přimět, aby napsalo celkovou velikost.

Jinak tam přiřazuješ nekompatibilní proměnné, do int* dáváš char*.

Ohodnoceno: 0x
 
Datum: 30.12.14 19:42
avatar

Máš tam zmatek, protože pole je dvourozměrné a p je jednorozměrné.

p je jen pointer a proto má délku 4.

pole je staticky deklarované a proto už kompilátor ví, že to jsou 2 pointry. Kdyby tam nebyla inicializace, mělo by délku 4.

Funkce sizeof nezjišťuje skutečnou velikost za chodu, ale deklarovanou velikost (velikost při kompilaci).

doplněno 31.12.14 01:59:

Tak to v céčku nelze nijak zjistit. Musíte buď předávat i rozměr nebo používat nějakou ukončující hodnotu (char používá binární nulu.)

Ohodnoceno: 1x
 
Datum: 31.12.14 01:38

No dobře, ale jak teda zjistím velikost pole předaného přes ukazatel?

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.