Warum wird diese Zeichenkette überschrieben?



  • Öhm?
    sizeof nameIn

    gibt mir nicht die Größe des Inhaltes an?! Ok, das wäre eine erklärung....
    D.h. ich müsste da auch sizeof(char)*strlen(nameIn) machen? (bzw. könnte das sizeof(char) weglassen, weils eh 1 ist....)

    Könnte ich nicht sizeof *nameIn machen? Dann würde das Dereferenziert werden und dann die wirkliche Größe erhalten? Oder geht das alles mit sizeof nicht?

    Danke schonmal



  • sizeof funktioniert nur zur Compilezeit und kann im Programm nicht dynamisch verwendet werden.



  • Zudem brauchst du noch Platz für die/das '\0'.

    nameOutput = malloc((strlen(nameIn) + strlen(FILE_EXTENSION) + 1) * sizeof(char) );
    


  • Noch eine Anmerkung:

    sizeof(FILE_EXTENSION) liefert hier 6 (5 Zeichen + '\0') weil es als char[] im aktuellen Scope definiert wird.
    strlen(FILE_EXTENSION) liefert hier 5 (5 Zeichen)

    sizeof nameIn liefert 4 weil es ein Pointer (char*) ist. (Auf 32-Bit Systemen)

    Und natürlich terminiert strcat.



  • DirkB schrieb:

    nameOutput = malloc((strlen(nameIn) + strlen(FILE_EXTENSION) + 1) * sizeof(char) );
    

    Wieviel Byte groß ist denn sizeof(char) gewöhnlich (garantiert)?


  • Mod

    _Falke schrieb:

    Wieviel Byte groß ist denn sizeof(char) gewöhnlich (garantiert)?

    sizeof(char) ist 1. Immer. Denn die Maßeinheit von sizeof sind char-Größen. Und gewöhnlich nennt man das dann auch 1 Byte, aber deine Definition von Byte könnte eine andere sein. Jedenfalls hat ein char nicht zwangsläufig 8 Bit Informationsgehalt (aber mindestens!).



  • _Falke schrieb:

    Wieviel Byte groß ist denn sizeof(char) gewöhnlich (garantiert)?

    signed char - 1 byte (Bereich -128 ... +127)
    unsigned char - 1 byte (Bereich 0 ... 255)

    sizeof char sollte immer 1 Byte betragen.

    [EDIT: Sepp war schneller 🙂 ]



  • Hallooo, ich wollte damit eigentlich nur sagen, dass die Multiplikation mit sizeof(char) überflüssig ist.


  • Mod

    _Falke schrieb:

    Hallooo, ich wollte damit eigentlich nur sagen, dass die Multiplikation mit sizeof(char) überflüssig ist.

    Ahh, ok. Leider kann man rhetorisch ausgesprochene Fragen nicht hören, wenn man sie nur liest.



  • SeppJ schrieb:

    Ahh, ok. Leider kann man rhetorisch ausgesprochene Fragen nicht hören, wenn man sie nur liest.

    Du kannst also nicht rhetorische ausgesprochene Fragen hören, die du liest? 😮 🙄 Hört sich nach einer Inselbegabung an. 😃


Anmelden zum Antworten