sizeof( char ) ist immer 1 !?



  • hi !

    des öfteren ließt man ja das sizeof( char ) immer 1 ist. dem stimme ich ja auch voll überein zumal es z.b. im final draft auch so festgehalten ist:

    When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1. When applied to an operand that has array type, the result is the total number of bytes in the array.75) When applied to an operand that has structure or union type, the result is the total number of bytes in such an object, including internal and trailing padding.

    wie schaut es jetzt allerdings aus, wenn ich einen autoconvert char -> wchat_t habe im compiler habe ?!



  • walk0n schrieb:

    wie schaut es jetzt allerdings aus, wenn ich einen autoconvert char -> wchat_t habe im compiler habe ?!

    Was für ein autoconvert?

    (bei wchar_t ist nicht garantiert, daß es immer 1 Byte groß ist - ich bin mir nicht mal sicher, ob das schon im C Standard exisitert hat)



  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum Compiler-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • welchen compiler benutzt du?



  • also normaler weise nutze ich schon den gcc bzw. unter windows den vom dev-cpp (ist ja soweit ich weiß der gcc-port für windows).

    ich hatte das ganze nur letztens mal gehört, dass es diese möglichkeit wohl gibt, dem compiler zu sagen, dass er einen autoconvert von char auf wchar_t machen soll.

    jetzt würde sich mir die frage stellen, wenn jemand ein programm (das wegen meiner unter einem unix-kompatiblem os programmiert wurde -> gcc) aus den sourcen übersetzt, ob es da zu eventuellen problemen kommen könnte, wenn

    sizeof( char ) != 1
    

    ist.



  • Widechars passen nicht in ein Byte, und sind mit ziemlicher Sicherheit mindestens doppelt so groß (dass also 65536 Buchstaben gespeichert werden können.
    Bei meinem 64-Bit Linux habe ich sogar vier Byte in wchar_t stecken. Wenn ich explizit ne 32-Bit Binary erstelle (Flag -m32), ist der wchar_t auch vier Byte lang.
    Wann ein char mal größer als ein Byte sein kann, weiß ich nicht. Habe ich noch nicht vorher gesehen.



  • Headhunter schrieb:

    Wann ein char mal größer als ein Byte sein kann, weiß ich nicht. Habe ich noch nicht vorher gesehen.

    wäre doch aber mal interessant zu wissen - oder ?! 🙂

    wie gesagt, wenn ein anderer vielleicht den flag (den es ja sicherlich geben wird) für diesen autoconvert gesetzt hat, wie verhält sich dann zum beispiel ein

    char* foo = malloc( 128 );
    

    sind es dann 128 byte ? oder sind es vielleicht 128 * 4 byte als schon 512 byte (um bei deinem 64bit-beispiel zu bleiben) ?

    (oder hab ich noch irgendwo einen falschen denkansatz 😕 )



  • Du musst den void* Rückgabewert von malloc erst nach char* casten..



  • Headhunter schrieb:

    Du musst den void* Rückgabewert von malloc erst nach char* casten..

    nicht in ansi c. da kann man void* zu jedem anderen pointer implizit casten lassen.



  • Der C Standard garantiert aber nicht für die Bit-Größe der Bytes. So kannst du natürlich 1 Byte haben, dass 32 Bit groß ist. Das würde nichts an sizeof(char) == 1 ändern.

    Aber solche Compiler findet man sicher nur auf merkwürdigen Architekturen.

    Ansonsten stell ich mal in Frage, dass es eine Funktion gibt, die alle char in wchar_t umwandelt.


Anmelden zum Antworten