Hallo zusammen,
Mein Problem:
ich bin C-Anfänger und hab mir den LCC-WIN32 C-compiler besorgt.
ich habe folgenden C+±Code gefunden :
…
char *string;
string = new char[80];
…
Der Compiler kennt anscheinend „new“ nicht.
Wie kann ich das in C nachbilden ?
dasselbe Problem habe ich mit „delete [] string;“
Hier kennt er „delete“ nicht
Vielen Dank für Eure Hilfe
Jörg
Auch Hallo,
Hallo zusammen,
Mein Problem:
ich bin C-Anfänger und hab mir den LCC-WIN32 C-compiler
besorgt.
Gut
ich habe folgenden C+±Code gefunden :
…
char *string;
string = new char[80];
…
Also new resaviert dir speicher auf dem heap! Wenn du das mit C machen will nimmst du am besten eine funktion wie malloc( void malloc(size_t size), oder calloc um das zu realisieren. Wenn du viel arbeitsspeicher hast kannst du auch mal schaun was passiert wenn du das new einfach weglässt…
Der Compiler kennt anscheinend „new“ nicht.
Wie kann ich das in C nachbilden ?
dasselbe Problem habe ich mit „delete [] string;“
Hier kennt er „delete“ nicht
Delete gibt den speicher wieder frei.Das lässt sich mit der funktion void free(void *pointer) realisieren.
Am einfachsten geht es natürlich wenn du dir einen C/C++ Compiler besorgst. Der kann C & C++ code compilieren, und es gibt viele gute kostenlose (www.c-plusplus.de -->Compiler)
Eigentlich war es das ja dann…
Vielen Dank für Eure Hilfe
Jörg
Tschüss
Daniel
Moin,
char *string;
string = new char[80];
Wie kann ich das in C nachbilden ?
string = (char*) calloc(80, sizeof(char));
dasselbe Problem habe ich mit „delete [] string;“
free(string);
Du solltest ‚string‘ nicht als Namen einer Variablen benutzen.
Thorsten
Moin,
Wenn du viel arbeitsspeicher hast kannst du auch mal
schaun was passiert wenn du das new einfach weglässt…
Wie bitte???
Am einfachsten geht es natürlich wenn du dir einen C/C++
Compiler besorgst. Der kann C & C++ code compilieren, und es
gibt viele gute kostenlose (www.c-plusplus.de -->Compiler)
Dann ist es immer noch kein C.
Thorsten
Moin,
Wenn du viel arbeitsspeicher hast kannst du auch mal
schaun was passiert wenn du das new einfach weglässt…
Wie bitte???
Oh ja stimmt:->
Natürlich sollte man dann gleich char strg[80] nehmen! Bei meinem 386(1MBRam) würde ich so was aber nie machen…
Ich war da wohl etwas zu schnell…
Am einfachsten geht es natürlich wenn du dir einen C/C++
Compiler besorgst. Der kann C & C++ code compilieren, und es
gibt viele gute kostenlose (www.c-plusplus.de -->Compiler)
Dann ist es immer noch kein C.
Hat auch keiner behauptet oder? Welcher Compiler ist den schon 100% auf die richtlinien, die sich inteligenterweise alle 2 monate ändern, abgestimmt? der Lcc— etwa? Na also!
Thorsten
Daniel
Moin,
Am einfachsten geht es natürlich wenn du dir einen C/C++
Compiler besorgst. Der kann C & C++ code compilieren, und es
gibt viele gute kostenlose (www.c-plusplus.de -->Compiler)
Dann ist es immer noch kein C.
Hat auch keiner behauptet oder?
Darum geht’s aber irgendwie.
Welcher Compiler ist den schon 100% auf die richtlinien, die
sich inteligenterweise alle 2 monate ändern, abgestimmt?
C hat einen verbreiteten Standard, ganz im Gegensatz zu C++.
Thorsten
Winzige Ergänzung
char *string;
string = new char[80];
Wie kann ich das in C nachbilden ?
string = (char*) calloc(80, sizeof(char));
In C solltest du prüfen, ob die Speicher-Reservierung auch geklappt hat. „calloc()“ gibt einen Null-Zeiger zurück, wenn die Speicheranforderung fehlschlägt, also:
if (0==string) { /* Fehler */; }
In C++ wirft der new-Operator (lt. C++ Standard) eine Exception, wenn kein Speicher mehr frei ist. Diese kann der Programmierer entweder abfangen und so den Fehler behandeln, oder das Programm wird automatisch beendet. In C++ kann man also eine fehlgeschlagene Speicheranforderung nicht ignorieren, in C sehr wohl. So dass es in C zu unerwünschten, manchmal nur sehr schwer zu findenden Bugs kommen kann.
cu Stefan.
Moin,
In C solltest du prüfen, ob die Speicher-Reservierung auch
geklappt hat.
Stimmt, damit hatte schon ich angefangen, aber ohne meinen
Editor, der Klammern für mich zählt, war mir das zuviel Arbeit.
Ich hätt’s erwähnen sollen.
Thorsten
Dankeschön an Euch
Hat geklappt.
Ich hatte mein Progrämmchen ohne Veränderung mit dem BorlandCompliler 5.5 und mit dem LCC_WIN32 mit den vorgeschlagenen Veränderungen compiliert.
Ergebnis :
BCC Dateigröße 49kb Größe im Speicher : 916kb
(trotz optimierung und ohne debuginfos)
LCC Dateigröße 6kb Größe im Speicher : 936kb
Jörg