tömb elemeinek száma

 ( kaltsi | 2008. szeptember 22., hétfő - 13:29 )

Hogy tudnám azt megállapíteni, hogy egy ilyen tömb hány elemből áll?

char *conf_f[]="server_port","time_out","mysql_host","mysql_user","mysql_password","mysql_database","."};

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

sizeof(conf_f) / sizeof ( char * )

de így azt kapom meg milyen nagyságú a tömb, nem?
de nekem meg az kéne, hogy hány különböző elemre tudok benne hivatkozni, ami jelen esetben 7

kipróbáltad?

conf_f - ben 7 darab char * pointered lesz, amik a tomb ellemeire mutatnak , conf_f -re a sizeof meg a 7 szer az egy pointer meretevel fog visszaterni. ( fuggetlenul a szoveg meretetol amikkel inicializaltad a tombot )
tehat sizeof( conf_f ) az nallam kb. 28-at ad vissza. ezt osztjuk a sizeof ( char * ) al, es pont 7-et kapunk, amit kerestunk eredetileg.

lentebb reagáltam, igen pont ugyan ide jutottam én is, csak elsőre nem gondoltam át rendesen :) köszi

Nem trivialis:

#include <stdio.h>

char *conf_f[]={"server_port","time_out","mysql_host","mysql_user","mysql_passwo
rd","mysql_database","."};

int funct(char *c[])
{
 int n;
 n=sizeof(c) / sizeof ( char * );
 printf("f=%d\n",n);
 return(0);
}
int main()
{
 int n;
 n=sizeof(conf_f) / sizeof ( char * );
 printf("n=%d\n",n);
 funct(conf_f);
 return(0);
}

a funct() fv ugyanazt a tipust eszi, mint a kerdeses tomb maga; viszont mar nem a jo' eredmenyt adja vissza. Akkor is, ha a funct(char *c[7])-kent deklaralod.

Szvsz az effele tomb-deklaraciokat zarja le a juzer mindig NULL-lal, es ha szukseges (azaz kell a me'rete), szamolja meg. Akkor tetszoleges fv-nek at lehet adni. Mintha string lenne.

A.

valóban igaz, hogy most utánna gondolok, mert a tömb az 7 db pointert tartalmaz, míg a fv-ben lévő tömb meg csak egyet.
Köszi a választ. Így már rájöttem én is hogy kell ezt nézni.

sizeof(conf_f) / sizeof(*conf_f)

A különbség csak a kód karbantarthatóságában jelentkezik, mégpedig ha véletlenül változik a conf_f[] tipusa, akkor nem kell az osztóban lévő tipust is átírni.