- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: Ist eine struct Definition als Stringarray möglich ??

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1

    Ist eine struct Definition als Stringarray möglich ??

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo C und GCC Kenner,
    kann ich ein Stringarray in einer Structur verwirklichen, etwa so ?
    Code:
    // Zeitvariablen
    typedef struct
    {
    char Sekunde,Minute,Stunde,Wochentag,Tag,Monat,Jahr;  // Hier ist alles klar... oder ??
    }
    RTC_TIME;
    
    typedef struct
    {
    char[] "Mon","Die","Mit","Don","Fre","Sam","Son";              // W_TAG[0] = "Mon" ??
    }
    W_TAG;
    Habe das noch nie praktizieren können, was ist Falsch daran, oder muss ich jeden String einzeln zuweisen ??

    Danke schon mal....

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Zu RTC_TIME: Das sind nur sieben Zeichen/Bytes (char)
    Zur W_TAG: Was willst du damit realisieren? Ich glaube das soll eher ein enum werden? Oder ein Array das du über RTC_TIME.Wochentag indizierst? So funktioniert das auf jeden Fall nicht!

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1
    Also mal einfach so formuliert : print(W_TAG[0]) sollte dann "Mon" ausgeben....,
    das mit RTC_TIME das funzt ja ,keine Fehler vom Compiler.
    Ich weiss auch nicht meine C Ausbildung ist über 10 Jahre her, kann das auch mit Javaausbildung verwechseln war zur selben Zeit...da haben wir mit Stringlisten/Arrays gearbeitet. Nur habe ich nun erst jetzt wieder angefangen mit C zu "Arbeiten" (AVR), die ganzen Jahre habe ich Delphi/Pascal gemacht und da ist ja einiges anders...

    PS: enum wird auch bekritelt...

    Habe ein Bsp. gefunden das wird mir glaube ich helfen....ja ja die Zeiger und Pointers
    Code:
    #include <stdio.h>
     
    typedef char * string;
     
    int main(void)
    {
      string strs[5];  // Make 5 strings
      int i;
     
      strs[0] = "first string";
      strs[1] = "second string";
      strs[2] = "third string";
      strs[3] = "this is the fourth string";
      strs[4] = "and finally this is the fifth string";
     
      for(i = 0;i < 5;++i)
        puts(strs[i]);
     
      return 0;
    }
    Geändert von oderlachs (15.06.2013 um 11:00 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    shedepe
    Gast
    Dann sollte ein Enum das richtige für dich sein.
    Ansonsten kann deine Deklaration der chars in W_TAG so nicht funktionieren. In C deklariert man ein array z.B. so : char meinArray[ARRAYGRÖSSE]
    Um dein Ziel mit einem Struct umzusetzen:

    typedef struct
    {
    char montag[] = "Mon";
    char dienstag[] = "Die";
    //usw.
    }W_TAG;

    Zugreifen kannst du dann über W_TAG.montag auf den string Montag

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    Ich glaube, dass Oderlachs etwas in der Art sucht (quasi ein Array aus char-Arrays):
    Code:
      const char *bla[7]={"Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"};
      for(int i=0;i<7;i++)
      {
        printf("%s",bla[i]);
      }
    Keine Ahnung ob man das so machen darf, aber es funktioniert.

    Edit:
    Laut http://publications.gbdirect.co.uk/c...alization.html geht das so (man kann sogar statt "const char *bla[7]" einfach nur "char *bla[]" schreiben).
    Geändert von robocat (15.06.2013 um 13:39 Uhr)

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1
    ich habe einen Returnwert von 0...6 // 0 = Montag also muss mit print WERT[0] "Montag" ausgegeben werden, wie soll das Programm W_TAG.montag wenn es nicht weiss welcher Tag ist und dieser nur im numerischem Wert von 0 bis 6 zur Verfügung steht.
    ENUM soll lt Beschreibung nur für Int-Werte gehen... ??
    Mehr Probleme habe ich mit der Einbindung der Variablen/Funktionen in die Main, die in der Header- und "Nichtmain"- datei definiert sind.

    in der "my_ds1301.h" steht es so:
    Code:
    /* ========================================================================== */
    /*                                                                            */
    /*                   Zeitfunktionen                                           */
    /*                                                                            */
    /* ========================================================================== */
    extern void time_init(void);
    extern void set_jahr(unsigned char);
    extern void set_monat(unsigned char);
    extern void set_tag(unsigned char);
    extern void set_wtag(unsigned char);
    extern void set_stunde(unsigned char);
    extern void set_minute(unsigned char);
    extern void set_secunde(unsigned char);
    Die funktion "time_init" ist in der my_ds1307.c wie folgt
    Code:
    /* ========================================================================== */
    /*                                                                            */
    /*                 Funktionen für RTC usw.                                    */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    typedef char * string;
    string W_TAG[7];  // 7 Strings
    
    
    void time_init(void)
    {
      W_TAG[0] = "MON";
      W_TAG[1] = "DIE";
      W_TAG[2] = "MIT";
      W_TAG[3] = "DON";
      W_TAG[4] = "FRE";
      W_TAG[5] = "SAM";
      W_TAG[6] = "SON"; 
      return 0; 
      }
    aber in der Main kann ich nicht auf W_TAG zugreifen:
    Code:
    /* ========================================================================== */
    #include <avr/io.h>
    #include <stdio.h>
    #include "my_ds1307.h"
    /* ========================================================================== */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    /*                                                                            */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    extern string W_TAG[7];  // 7 Strings
    
    int main(void)
    {
    int i;
     for(i = 0;i < 7;++i)
     puts(W_TAG[i]);    ///  W_TAG wird nicht erkannt
    ;
    }
    ich kann doch W_TAG[] nicht noch einmal definieren in der Main ??

    Fehlermeldung:
    ../my_rtc_clock.c:54: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'W_TAG'
    ../my_rtc_clock.c: In function 'main':
    ../my_rtc_clock.c:60: error: 'W_TAG' undeclared (first use in this function)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  7. #7
    shedepe
    Gast
    Dann deklariere W_TAG nicht in der my_ds1307.c sondern mit extern in der dazu gehörigen h Datei und binde diese über include in deine main.c ein

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1
    Besten Dank!!!
    Lach nun frisst doch der Teufel Fliegen, so hatte ich es ja in der UR-Version und da hat die "my_ds1307.c " gemecktert das das W_TAG für sie bei time_init unbekannt ist..und nun geht es...

    Na ja kann sein das ich was übersehen habe, oder falsch gedeute, jedenfalls bin ich ein "paar Kilometer" weiter jetzt bei meinem Vorhaben. Ich habe schon an mich selber gezweifelt tzzz.

    Danke sagt
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Ähnliche Themen

  1. [ERLEDIGT] Probleme mit A Star, wenn Objekt größer ist als eine Nodepunkt
    Von Ritchie im Forum Software, Algorithmen und KI
    Antworten: 20
    Letzter Beitrag: 23.09.2012, 19:09
  2. switch case aud union und struct gehen schief, hat einer eine Idee warum ???
    Von jdelphi im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 0
    Letzter Beitrag: 29.09.2011, 13:04
  3. Zeiger auf Struct in einer Struct
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 11.11.2009, 14:42
  4. Mehr als 12 sprünge auf eine Sprungmarke nicht möglich?
    Von strunz im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 19.10.2006, 08:38
  5. [ERLEDIGT] Ist das zuprogrammieren möglich ???
    Von Skull im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 21.08.2004, 12:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test