Sziasztok!
Az lenne a kérdésem, hogy hogyan lehetne megkapni egy többdimenziós tömb eleminek számát? Nem az egyes elemek hosszát, hanem azt, hogy hány elem van. Azt a megoldás már megtaláltam, hogy a teljes hosszat elosztom a null karakterek nélküli hosszával az egyes elemeknek, de mi van akkor, ha nem mindegyik ugyanolyan hosszú? Példa:
char* id[] = {"1234567", "23456789446", "ABCDEFGH"};
Nekem erre 3-at kellene kapnom válaszként. Valami ötlet?
Norgi
char * hossza
Re: char * hossza
Kód: Egész kijelölése
char * szoveg [] = { "A", "BC", "DEF" };
uint8_t i;
for( i = 0; i < sizeof(szoveg) / sizeof(char *); i++ )
{
Serial.println(szoveg[i]);
}
0. byte -> mutató az első stringre
2. byte -> mutató a második stringre
4. byte -> mutató a harmadik stringre
A sizeof( szoveg ) 6-ot fog neked adni, mert a mutatókból álló tömböd 6 byte-ból áll. Ezt kell leosztanod a char * méretével, amit a sizeof( char * ) fog neked megadni (2).
6/2 = 3
Az osztástól ne ijedj meg, a fordító fordítási időben kiszámolja neked és a végleges kódba konstans 3 fog kerülni.
Re: char * hossza
csabeszq írta:A string tömbben mutatók vannak (AVR alatt 2 byte).Kód: Egész kijelölése
char * szoveg [] = { "A", "BC", "DEF" }; uint8_t i; for( i = 0; i < sizeof(szoveg) / sizeof(char *); i++ ) { Serial.println(szoveg[i]); }
0. byte -> mutató az első stringre
2. byte -> mutató a második stringre
4. byte -> mutató a harmadik stringre
A sizeof( szoveg ) 6-ot fog neked adni, mert a mutatókból álló tömböd 6 byte-ból áll. Ezt kell leosztanod a char * méretével, amit a sizeof( char * ) fog neked megadni (2).
6/2 = 3
Az osztástól ne ijedj meg, a fordító fordítási időben kiszámolja neked és a végleges kódba konstans 3 fog kerülni.
Esküszöm próbáltam, de valamit elnézhettem. Köszi szépen a gyors választ sokat segítettél!
Norgi
