C++-Anweisung mit C nachbilden

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