structuren in ANSI C und C++ !?!?!



  • Original erstellt von Maxi:
    [...]aber bei c++ macht man das so[...]

    nein bei C++ brauchst du weder das typedef noch das struct beim Typangaben.



  • ich wiedermal ...
    bekomme gleich ne kriese ... dieser beschissene lcc-compiler scheint ja alles zu schlucken (das gleiche programm schmiert mir in VC++6 einfach ab)

    Dabei erscheint ein Dialog mit der meldung
    "Debug Assertion Failed" und noch anderer Mist

    es geht um folgendes code-fragement (ich hoffe jemand macht sich die kleine muehe und ueberfliegt das mal kurz bitte bitte .. *schnief*:

    #include "stdafx.h"
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    #define MAX_LINE_LENGTH 1000
    #define ISSPACE(c) ((c)==' ' || (c) =='\t' || (c) =='\n' || (c) =='\r' || (c) =='\f')
    
    int read_cte_file(char *file_name)
    {
        if((ptr_cte_file=fopen(file_name,"r"))==NULL)
            {
                printf("Could not open file %s", file_name);
                return -1;
            }
        else
            {
                printf("Hurra Datei konnte geoeffnet werden ..\n");
                char *line = (char *)malloc(MAX_LINE_LENGTH * sizeof(char));
    
                while(fgets(line, MAX_LINE_LENGTH, ptr_cte_file))
                    {
                        char *token = (char *)malloc(MAX_LINE_LENGTH * sizeof(char));
                        int cnt = 0;
                        for(unsigned i=0; i<strlen(line); i++)
                            {
                                if(!ISSPACE(line[i]))
                                    {
                                        token[cnt] = line[i];
                                        cnt = cnt + 1;
                                        token[cnt] = '\0';
                                    }
                            }
                        if(strchr(token, ':')==NULL)
                            {
                            }
                    }
            fclose(ptr_cte_file);
            }
        return 0;
    }
    
    int main(int argc,char *argv[])
    {
        char *file_name = "C:\\Programme\\lcc\\projects\\Cte_Checker\\test.cte";
        read_cte_file(file_name);
    
        return 0;
    }
    

    hat jemand vielleicht ne ahnung warum ich oben geschilderte Fehlermeld. bekomme?

    danke vorab vielmals



  • nur noch eine kleine Hinzufügung: globale und statische Variablen liegen nicht auf dem Stack.



  • noch ne kleine anmerkung zu meiner letzten posterei:

    das file in main ist ne einfache textdatei .. duerfte fuer weiteren programmablauf nicht problematisch sein

    danke .



  • hat jemand erfahrung mit win32-lcc C-Compiler gemacht ?!?!

    Ich wuerde gerne unter VC++6 entwickeln aber das komische ist dass ich das gleiche programm dort nicht fehlerfrei zum laufen bekomme (siehe meine letzten zwei postings fuer die ich noch keine antwort bekommen habe)

    vielen dank.



  • @<newbie>
    Beruhige dich mal bitte. So schnell wo du hier postet kann und will kein Mensch antworten.

    Bedenke mal, dass du was von anderen willst. Also verhalte dich bitte entsprechend.



  • Beruhige dich mal bitte. So schnell wo du hier postet kann und will kein Mensch antworten.

    dass da jemand von der admin paepstlicher als der Papst sein wird hab ich mir schon gedacht gehabt ..

    Bedenke mal, dass du was von anderen willst. Also verhalte dich bitte entsprechend.

    hab ich irgendwas schlimmes geschrieben oder euch angemotzt dass ihr nicht antwortet?!? du schreibst ja so als ob du voellig ueberfordert bist!? ich bin aufm teppich und habe nur darauf hingewiesen dass ich noch ein paar unbeantwortete fragen hatte, also wo is das prob. !?!



  • also wo is das prob. !?!

    1. Du postest viel Code.
    2. Der Code lässt sich nichtmal übersetzen
    3. Der Code ist völlig wirr
    4. Du beschreibst nicht dein Problem, sonder sagst nur "geht nicht, erklärt mal warum"
    5. Du postest in einer Frequenz die es einem nicht ermöglicht vernünftig zu antworten.

    dass da jemand von der admin paepstlicher als der Papst sein wird hab ich mir schon gedacht gehabt ..

    Warum hast du dann aus diesem Denken keine angemessene Konsequenz gezogen?

    Zu deinem Code:
    1. Was ist die Aufgabe von read_cte_file?
    2. Was ist ptr_cte_file?
    3. Ich sehe viele mallocs, aber kein einziges free. Warum nicht?
    4. Was ist der Sinn dieser Bedingung:

    if(strchr(token, ':')==NULL)
    {
    }
    

    ?



  • 1. Du postest viel Code.

    ich hab hier schon mehr gesehen ..

    3. Der Code ist völlig wirr

    was isn daran "wirr" !?! das ding ist eine einzige funktion die ueber 40 zeilen ne textdatei oeffnet, zeile fuer zeile einliest und aus jeder zeile die leerzeichen entfernt und dabei diese gesaeuberte zeile einer variablen namens token zuweist.

    4. Du beschreibst nicht dein Problem, sonder sagst nur "geht nicht, erklärt mal warum"

    genauso machen es doch die meisten hier oder? also ich sehe hier viele die sagen "geht nicht erklärt mal warum" warum nicht ich?

    5. Du postest in einer Frequenz die es einem nicht ermöglicht vernünftig zu antworten.

    ok, das stimmt... bin halt n schnelltipper 😃
    wie auch immer ...
    uebrigens:
    ptr_cte_file ist ein FILE pointer also als

    FILE *ptr_cte_file;
    

    deklariert.

    Zu deinem Code:
    1. Was ist die Aufgabe von read_cte_file?
    2. Was ist ptr_cte_file?
    3. Ich sehe viele mallocs, aber kein einziges free. Warum nicht?
    4. Was ist der Sinn dieser Bedingung:

    if(strchr(token, ':')==NULL)
    {
    }

    1. liest textdatei ein
    2. pointer to FILE
    3. hab sie weggelassen 🙄
    4. garkeiner..urspruenglich habe ich dort die zeilen ausgeben lassen,die einen doppelpunkt beinhalteten

    thnx.



  • Du beschreibst nicht dein Problem, sonder sagst nur "geht nicht, erklärt mal warum"

    genauso machen es doch die meisten hier oder? also ich sehe hier viele die sagen "geht nicht erklärt mal warum" warum nicht ich?

    Nö, machen Sie nicht. Sie beschreiben ihr Problem.

    Mal 'ne andere Frage: Ist an dem Code irgendetwas C++-spezifisch? Für mich sieht das nach reinstem Ansi C aus.

    Warum bindest du <ctype.h> ein, wenn du dann doch ein eigenes isspace schreibst?

    printf("Could not open file %s", file_name);
    [...]
    printf("Hurra Datei konnte geoeffnet werden ..\n");

    Du scheinst Probleme damit zu haben dich für eine Sprache zu entscheiden. Wer soll denn das Programm bitte benutzen.

    Warum schreibst du mal i++ und mal cnt = cnt + 1? Was hällst du von einem einheitlichen Stiel?

    ein #include "stdafx.h" ist unnötiger VC++-spezifischer Müll.

    char *token = (char *)malloc(MAX_LINE_LENGTH * sizeof(char));  // Warum MAX_LINE_LENGTH und nicht strlen(line)? 
    int cnt = 0;
    for(unsigned i=0; i<strlen(line); i++)
    {
       if(!ISSPACE(line[i]))
       {
          token[cnt] = line[i];
          cnt = cnt + 1;
          token[cnt] = '\0';
       }
    }
    

Anmelden zum Antworten