char * hossza

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Norgi
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2014. június 26. csütörtök, 15:07

char * hossza

Hozzászólás Szerző: Norgi »

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
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: char * hossza

Hozzászólás Szerző: csabeszq »

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]);
  }
A string tömbben mutatók vannak (AVR alatt 2 byte).

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.
Norgi
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2014. június 26. csütörtök, 15:07

Re: char * hossza

Hozzászólás Szerző: Norgi »

csabeszq írta:

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]);
  }
A string tömbben mutatók vannak (AVR alatt 2 byte).

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
Válasz küldése