C size_t in string.h -> Welcher Datentyp?

  1. gecco

    gecco Thread Starter MacUser Mitglied

    Mitglied seit:
    03.09.2005
    Beiträge:
    425
    Zustimmungen:
    1
    Hi,

    ich sitze hier an einem Problem; und zwar will ich eine Funktion aus einer Std-Bibliothek benutzen (strlen) um die Länge eines char[]-Arrays auszulesen.
    Strlen übergiebt die gesuchte Zahl auch korrekt, jedoch motzt der Compiler, dass es bei der conversation von size_t zu uint8 (Variable für die charlänge muss uint8 sein)
    welches Types ist denn nun size_t?? Ich finde da nichts konkretes!

    ich habe es jetzt "unschön" gecastet, da ich für das Programm sicher sein kann, dass der Wertebereich für uint8 auf keinen Fall überschritten wird!
    Code:
    PhoneNoLength = (uint8)strlen(TestNumber);
    
    PhoneNoLength ist eben vom Typ uint8 TestNumber ist ein char[20]

    Wie kriege ich das Ganze "sauber" gelöst??
    DANKE
     
  2. oneOeight

    oneOeight MacUser Mitglied

    Mitglied seit:
    23.11.2004
    Beiträge:
    48.160
    Zustimmungen:
    3.885
    such nächste mal genauer in types.h ;)

    Code:
    typedef __darwin_size_t		size_t;
    Code:
    #if defined(__GNUC__) && defined(__SIZE_TYPE__)
    typedef __SIZE_TYPE__		__darwin_size_t;	/* sizeof() */
    #else
    typedef unsigned long		__darwin_size_t;	/* sizeof() */
    #endif
    
    eine unsigned long auf 8-bit unsigned integer zu casten ist auch nicht unbedingt das schlaueste was man machen kann ;)
    da gibt es doch bestimmt konvertierungsroutinen...
     
  3. dannycool

    dannycool MacUser Mitglied

    Mitglied seit:
    02.02.2005
    Beiträge:
    1.489
    Zustimmungen:
    34
    Ein Typ, der für solche Größenangaben geeignet ist. Also ganz bestimmt nicht uint8. Was spricht dagegen, einfach auch size_t zu benutzen? Das wäre das sauberste.
     
  4. below

    below MacUser Mitglied

    Mitglied seit:
    15.03.2004
    Beiträge:
    13.289
    Zustimmungen:
    1.086
    Der Kompiler meckert, weil hier eine "Vereinbarung" gebrochen wird:

    strlen sagt: Ich gebe Werte von 0 bis*4294967295 aus (Wertebereich von unsigned long)
    Du sagst: Ich akzeptiere Werte von 0 bis 255 (Wertebereich von unsigned char)

    Dass in Deinem speziellen Fall dieser Bereich ausreicht mag ja sein. Aber woher soll der Compiler das wissen? Und was soll er tun, wenn strlen jetzt 512 ausgibt?

    Das so zu Casten ist keine gute Idee.

    Alex
     
  5. gecco

    gecco Thread Starter MacUser Mitglied

    Mitglied seit:
    03.09.2005
    Beiträge:
    425
    Zustimmungen:
    1
    Hat sich schon erledingt, habe entsprechendes noch von einem kollegen bestätigt bekommen.
    klar wäre ein unsigned long (oder besser einfach ein size_t) sauber, aber auf der Hardware ist aber kein Platz für überflüssige Bytes, und somit ist uint8 perfekt.
    hat sich damit also erledigt, es wird exakt so laufen wie oben von mir beschrieben. Da hier Telefonnummern übergeben werden und diese seltenst eine Länge von 255 überschreiten (ja, solange der Mars noch nicht besiedelt ist, ok) sind sämtliche höherwertigen (stelligen) Bits für mich und das Programm absolut sinnfrei

    Danke trotzdem
     
  6. below

    below MacUser Mitglied

    Mitglied seit:
    15.03.2004
    Beiträge:
    13.289
    Zustimmungen:
    1.086
    Richtig. Wie ich oben geschrieben hast weisst Du das, und ich auch. Aber gcc halt nicht ;)

    Alex
     
  7. gecco

    gecco Thread Starter MacUser Mitglied

    Mitglied seit:
    03.09.2005
    Beiträge:
    425
    Zustimmungen:
    1
    Der gcc muss das auch nicht wissen;) Es muss nur funktionieren!

    ok, habe verstanden worauf du (und die anderen) hinauswolltest

    bevordie Frage auftritt: Ja die Telefonnummern werden zuvor an anderer Stelle auf Sinnhafigkeit (gibt es das Wort überhaupt?) überprüft
     
  8. tux0815

    tux0815 MacUser Mitglied

    Mitglied seit:
    02.10.2004
    Beiträge:
    38
    Zustimmungen:
    0
    Öffentliche Telefonnummern sind eh auf 20 Stellen begrenzt - so zumindest mein letzter Stand aus den ETSI-Bibeln ;)
     
  9. gecco

    gecco Thread Starter MacUser Mitglied

    Mitglied seit:
    03.09.2005
    Beiträge:
    425
    Zustimmungen:
    1
    Nicht falsch aber auch nicht komplett richtig!

    Es gibt ja noch "erweiterungen" zu den Telefonnummern. Also post-Addressnummern z.B. für DTMF (wurde früher mal verwendet um ABs fern-abzuhören)
     
Die Seite wird geladen...