Warum wird diese Zeichenkette überschrieben?
-
Öhm?
sizeof nameIngibt 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)?
-
_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.
-
_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.