C size_t in string.h -> Welcher Datentyp?

Diskutiere mit über: C size_t in string.h -> Welcher Datentyp? im Mac OS X Entwickler, Programmierer Forum

  1. gecco

    gecco Thread Starter MacUser Mitglied

    Beiträge:
    425
    Zustimmungen:
    1
    Registriert seit:
    03.09.2005
    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

    Beiträge:
    46.773
    Zustimmungen:
    3.629
    Registriert seit:
    23.11.2004
    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

    Beiträge:
    1.485
    Zustimmungen:
    34
    Registriert seit:
    02.02.2005
    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

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    Registriert seit:
    15.03.2004
    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

    Beiträge:
    425
    Zustimmungen:
    1
    Registriert seit:
    03.09.2005
    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

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

    Alex
     
  7. gecco

    gecco Thread Starter MacUser Mitglied

    Beiträge:
    425
    Zustimmungen:
    1
    Registriert seit:
    03.09.2005
    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

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

    gecco Thread Starter MacUser Mitglied

    Beiträge:
    425
    Zustimmungen:
    1
    Registriert seit:
    03.09.2005
    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...
Ähnliche Themen - size_t string Welcher Forum Datum
Netbeans 7.3 gibt String nicht aus Mac OS X Entwickler, Programmierer 13.04.2013
String in Array-Aufteilen? Mac OS X Entwickler, Programmierer 11.01.2012
Anfängerproblem, Char aus String und diesen dann vergleichen.... Mac OS X Entwickler, Programmierer 28.12.2011
String an andere Klasse übergeben Mac OS X Entwickler, Programmierer 19.06.2011
C++, Probleme mit String kopieren und operator Mac OS X Entwickler, Programmierer 19.05.2011

Diese Seite empfehlen

Benutzerdefinierte Suche