kleine Frage zu struct



  • Also ich habe mehrere Variablen, die ich in eine Structur packen will. die Variablen könnten z.b. so aussehen

    char cErste[4][2]  = {
                           {"abcd"},
                           {"defg"}   };
    
    char cZweite[5][3] = {
                           {"hallo"},
                           {"test1"}  };
    

    Warum kann ich das ganze nicht in eine Structur Packen und den Variablen in der Structur gleich die Werte zuweisen? Gibt es ne Möglichkeit den Variablen die Werte zuzuweisen ohne jedesmal strcpy oder so zu verwenden (dazu müsste vieleicht gesagt werden das sich die Werte der Variablen nicht mehr ändern).

    danke schon mal für Antworten



  • initialisieren kannst du nur, wenn du ein objekt erstellst...

    struct str
    {
    char cErste[2][5];
    char cZweite[3][6];
    };
    
    struct str a={"HAHA"};
    

    außerdem mußt du für 4 buchstaben ein 5 elemente reservieren (binäre null)....
    und außerdem würd ich

    char string[anz. strings][stringlänge]
    

    nehmen...

    mfg

    [ Dieser Beitrag wurde am 08.01.2003 um 09:21 Uhr von mi+chl editiert. ]



  • Erst mal danke für die Antwort, nur hast du mir genau das worauf ich eigentlich hinaus wollte nicht beantwortet. Und zwar wie fülle ich die Stringarrays?
    Steht jetzt bei dem was du gepostet hast in allen Strings das gleiche???
    Ich möchte im endefekt genau das drinnen stehen haben was ich oben gepostet hatte.



  • Nun also welchen Sinn soltte es machen bei der Definition einer Structur gleich die Werte einzutragen die Sie aufnehmen soll.

    Du kannst das wie folgt lösen.

    #include "stdafx.h"
    #include "string.h"
    #include "stdio.h"
    
    struct strSpeicher
    {
       unsigned int   uiFlag;
       char      szMsg[255]; // Begrenzung erforderlich <--->
       unsigned int   uiMsgCutted;
       char      szTest[5][4];
    };
    
    int main(int argc, char* argv[])
    {
       struct strSpeicher _Speicher;
    
       _Speicher.uiFlag = 0;
       _Speicher.uiMsgCutted = 0;
       strcpy(_Speicher.szMsg,"Hallo das geht leider nicht anders");
    
       // Sorry die Zeile sieht ein bisschen Krass aus ik weis aber 
       // spart Platz löl dient zur Initialisierung jedes
            // Zeichens in szTest auf 0
       for (int i=0;i<5;i++) for (int x=0;x<4;x++) _Speicher.szTest[i][x] = 0;
    
       _Speicher.szTest[0][0] = 's';
       //_Speicher.szTest[1] = "TExt"; // <----- Das Funzt nicht !!!!! 
       strcpy(_Speicher.szTest[2],"Err");
       strcpy(_Speicher.szTest[1],"Test");
       // Achte darauf das du mit der vorherigen Anweisung die Grenzen
       // überschritten hast.
       // Jetzt solltest du dir die Structur mal mit dem Debugger anschauen lol
       return 0;
    }
    

    [ Dieser Beitrag wurde am 08.01.2003 um 10:48 Uhr von DaDaywalker editiert. ]



  • Also ich habe da vieleicht etwas zu kurz drüber nachgedacht. Direkt Variablen zuweisen macht natürlich keinen Sinn, aber wenn du meinetwegen eine Struktur _language hast und machst dann 2 Versionen (eine zb. Deutsch und eine Englisch) dann kannst due ganz einfach über abfrage entscheiden auf welche von beiden ein Pointer zeigen soll. Somit kannst du dann z.b. zwischen 2 Sprachen unterscheiden.
    So das war jetzt nur mal so nebenbei was ich bezwecken möchte.
    @DaDaywalker: Das was du gepostet hast möchte ich ja gerade nicht tun. Ich will kein strcpy oder so verwenden (siehe erstes Post). Wenn ich es so machen wollte wie du sagst, dann müste ich mir ne Initfunktion schreiben die vorm eigentlichen Programmstart aufgerufen wird. Das wollte ich umgehen.
    Ich habe aber mittlerweile durch etwas rumprobieren rausbekommen wie ich es lösen kann. Trotzdem danke für die Antworten.



  • strcpy fuellt einen string mit inhalt
    wenn du einen string mit inhalt fuellen willst, musst du was verwenden?

    es geht nicht anders.



  • Naja nur wenn ich strcpy verwenden will, dann muss ich das in einer Funktion tun. Ich kann es aber auch vom Prinzip her so machen, wie mi+chl es gepostet hatte:

    struct _str
    {
       char cErste[2][5];
       char cZweite[3][6];
    };
    
    typedef struct _str STRUKTUR;
    
    STRUKTUR Eins = {
                       {"abcd",
                        "efgh"  },
    
                       {"hallo",
                        "test1" } };
    

    Da ist nix mit strcpy und somit kann der ganze mist oberhalb von meinen Funktionen, bei den Gobals stehen.



  • globale variablen sind aber böse, wieso willst du das nicht in main machen?

    mfg



  • Warum sind denn Globals böse??? Wenn ich nen haufen Variablen habe die ich in mehreren Funktionen verwende, dann nützt mir das reichlich wenig, wenn die nur in der main bekannt sind. Und jetzt gehe mal davon aus du schreibst dein Programm nicht für den PC, sondern programmierst nen Mikrocontroller. Da hast du nicht unendlich viele Ressourcen. Wenn du da immer alle Variablen übergeben willst, verlierst du Speicherplatz und Zeit ohne ende und das darf halt nicht sein. Naja und was bleibt mir da anderes übrig als die Variablen Global verfügbar zu machen.


Anmelden zum Antworten