Hilfe Hab Probleme mit der Daynamischen Speicherverwaltung
-
Guten Tag
Ich hab mal eine Frage
Warum funktioniert dieses Programm nicht
(stammt aus Basiswissen IT Berufe Anwendungsentwicklung)
#include <string.h>
#include <stdio.h>
#include <stdlib.h>void main(void)
{
char *c_zeiger;
c_zeiger = malloc(10);
strcpy(c_zeiger,"ABC");
printf("%s\n",c_zeiger);
free(c_zeiger);
}wenn ich statt c_zeiger = malloc[10];
c_zeiger = new char[10];
eingebe funktioniert es!Aber warum funktioniert das Original Programm(das steht wirklich so im Buch)nicht??
Danke im voraus
-
Du compilierst C als C++ ?
Kurt
-
Sorry hab ich vergessen zu posten
C++
Borland C++ Editor
-
Gib deiner Quellcode-Datei die Endung .c anstatt .cpp.
-
Hab ich gemacht
leider bleibt die Fehlermeldung bestehenCannot convert 'void *' to 'char *'
Borland ist ein C++ Editor
kann der vielleicht keinen c-Source verarbeiten
-
So ist es richtig:
c_zeiger = (char*) malloc(10);malloc() gibt dir void* zurück und nicht char*

Also musst du das casten.
-
Sorry aber das ist nicht von mir
das kommt original so aus dem Buch mit dem ich das erst noch lernen soll!kannst du mir bitte sagen wie das "casten" gemacht wird?
und wie es in diesem Fall aussieht?
Danke
-
Naja, du sagst dem Compiler eben mit (char*) das er aus dem zurückgegeben void-Zeiger einen Zeiger auf char machen soll. Mehr ist das nicht

Kannst dazu ja nochmal das hier lesen.
-
Danke schön
Hat funktioniertSchönen Tag noch
bis zum nächsten Problem
-
freaked schrieb:
So ist es richtig:
c_zeiger = (char*) malloc(10);malloc() gibt dir void* zurück und nicht char*

Also musst du das casten.Nur in C++. In C wird ein void*-Zeiger automatisch in den Typ des Zeigers auf der linken Seite umgewandelt. => Wenn du den Code mit einem C-Compiler compilieren würdest, sollte es keine Probleme geben. (bis auf das void main()...)
Caipi
-
Caipi schrieb:
Wenn du den Code mit einem C-Compiler compilieren würdest, sollte es keine Probleme geben. (bis auf das void main()...)Caipi
Das gibt Probleme?
Ich dachte das käme gerade aus C und gäbe in C++ Probleme?
-
roan312 schrieb:
Caipi schrieb:
Wenn du den Code mit einem C-Compiler compilieren würdest, sollte es keine Probleme geben. (bis auf das void main()...)Caipi
Das gibt Probleme?
Ich dachte das käme gerade aus C und gäbe in C++ Probleme?Nope. void main() war noch nie Standard. (Weder in C noch in C++) siehe eventuell auch http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=main#Answ
Allerdings akzeptieren manche (in diesem Punkt nicht standardkonforme) Compiler in auch ein void-main(), oder quitieren es "nur" mit einer Warnung...Caipi
-
Gut zu wissen, danke.
-
Caipi schrieb:
Nope. void main() war noch nie Standard.
Doch, in C war es nicht verboten!
-
Probiere es mal mit
c_zeiger = (char *) malloc (sizeof (char) * 10); /* oder */ c_zeiger = (char *) calloc (sizeof (char), 10);