fgets-problem bei dyn. speicher
-
#include <stdio.h> int main() { char *stringens = malloc(25 * sizeof(char)); printf("\nabcdefghijklmnopqrstuvwxyz\n"); fgets(stringens, sizeof(stringens),stdin); printf("%s\n", stringens); free(stringens); return (0); }
der compiler meint bei malloc:
ERROR: `NEED EXPLIZIT CAST TO CONVERT:
FROM: int
TO: char*wo liegt das problem?
-
Also wenn da stehen würde "from void* to char*" , dann würde ich sagen, dass du einen C++ Compiler benutzt und den Rückgabewert von malloc explizit auf char* casten musst.
Übrigens: sizeof(stringens) macht nicht das, was du vermutlich erreichen willst. stringens ist ein Pointer also gibt dir das nur die Größe eines Pointers auf deinem System zurück. Mach besser:
fgets(stringens, 24,stdin);
-
ich kann doch ohne probleme einen c++ comp. benutzen, da c in c++ ja enthalten ist, oda?
wie soll ich den rückgabewert von malloc explizit auf char* setzen?
bisher hat es eigentlich immer so geklappt.iny
-
Hi!
1. Ja C ist als Untermenge in C++ enthalten.
2. Ein C-Cast funktioniert indem du vor den Wert der gecastet werden soll den Typen in Klammern schreibst:char *stringens = (char*)malloc(25 * sizeof(char));
Code-Hacker
-
sizeof(stringens) muss 4 zurückgeben, wenn ich mich nicht irre, denn es wird die Größe des Pointers zurückgebene. Ein Pointer ist kein Array!!!
-
supertux schrieb:
sizeof(stringens) muss 4 zurückgeben, wenn ich mich nicht irre,
Du irrst dich. Die Größe eines Pointers muss keineswegs IMMER 4 Byte groß sein.
-
kann ich stringens jetzt für fgets() benutzen oda nicht?
-
ItsNotYou schrieb:
kann ich stringens jetzt für fgets() benutzen oda nicht?
ja, aber mit Länge 24. Siehe die erste Antwort!
-
Und genau deswegen soll man _nicht_ bei malloc casten.
Ihr habt nämlich vergessen stdlib.h einzubinden.Denn wenn malloc nicht deklariert ist, wird int als return Typ angenommen und wir wollen doch wohl keinen int in einen char* umwandeln, oder?