C++-Anweisung mit C nachbilden

Von: , Frage gestellt am Do, 26. Apr 2001

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

8 Antworten zu dieser Frage

  1. Antwort von nach 34 Minuten 0 hilfreich
    Re: C++-Anweisung mit C nachbilden

    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

    • Antwort von nach einer Stunde 0 hilfreich
      Re: C++-Anweisung mit C nachbilden

      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

      • Antwort von nach einer Stunde 0 hilfreich
        Re^2: C++-Anweisung mit C nachbilden

        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

        • Antwort von nach 2 Stunden 0 hilfreich
          Re: C++-Anweisung mit C nachbilden

          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

  2. Antwort von nach einer Stunde 0 hilfreich
    Re: C++-Anweisung mit C nachbilden

    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

    • Antwort von nach 4 Stunden 0 hilfreich
      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.

      • Antwort von nach 6 Stunden 0 hilfreich
        Re: Winzige Ergänzung

        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

        • Antwort von nach 20 Stunden 0 hilfreich
          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

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!