Új hozzászólás Aktív témák

  • llaszlo

    veterán

    A következő ötletem támadt. Két tömböt hozok létre az egyik tartalmazza a karaktereket kis- és nagybetűkkel a másik pedig az ezekhez tartozó számokat.

    Viszont
    Miért foglalnak két helyet egy tömbben az ékezetes karakterek?

    int x=0;
    unsigned char betu []="AaÁáBbCcDdEeÉéFfGgHhIiJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz";

    Kiíratáskor, viszont ez fogad

    while (betu[x])
    {
    printf ("x=%d %c ", x, betu [x]);
    x++;
    }

    x=0 A x=1 a x=2 � x=3 � x=4 � x=5 � x=6 B x=7 b x=8 C x=9 c x=10 D x=11 d x=12 E x=13 e x=14 � x=15 � x=16 � x=17 � x=18 F x=19 f x=20 G x=21 g x=22 H x=23 h x=24 I x=25 i x=26 J x=27 j x=28 K x=29 k x=30 L x=31 l x=32 M x=33 m x=34 N x=35 n x=36 O x=37 o x=38 � x=39 � x=40 � x=41 � x=42 � x=43 � x=44 � x=45 � x=46 � x=47 � x=48 � x=49 � x=50 P x=51 p x=52 Q x=53 q x=54 R x=55 r x=56 S x=57 s x=58 T x=59 t x=60 U x=61 u x=62 � x=63 � x=64 � x=65 � x=66 � x=67 � x=68 � x=69 � x=70 � x=71 � x=72 � x=73 � x=74 V x=75 v x=76 W x=77 w x=78 X x=79 x x=80 Y x=81 y x=82 Z x=83 z

    Az ékezetes karakterek helyén ?-ek vannak.

    Így látszólag jó, viszont az x értéke mutatja, hogy mégsem egy 69-es tömböt, hanem egy 85-ös tömböt foglal le a \0-val együtt.

    while (betu[x])
    {
    printf ("x=%d %c ", x, betu [x]);
    x++;
    }

    printf ("%d", x);

    AaÁáBbCcDdEeÉéFfGgHhIiJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz84

    Az ékezetes karaktereket 16 biten tárolná és nem 8-on, a char pedig csak 8-cal dolgozik?
    Ez lenne a hiba oka?
    Mi lehet a megoldás?

    Szerk: Visszaolvastam a fórumot is az ékezetes karakterekkel kapcsolatban és láttam, hogy másnál is gondot okoz. Melyik megoldás lenne ebben az esetben a legcélszerűbb?

Új hozzászólás Aktív témák

Hirdetés