- LiFePO4 Speicher Test         
Ergebnis 1 bis 8 von 8

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

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1

    Ist eine struct Definition als Stringarray möglich ??

    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
    37
    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
    74
    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 12: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 14:39 Uhr)

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    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

Ä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, 20: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, 14:04
  3. Zeiger auf Struct in einer Struct
    Von Jaecko im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 11.11.2009, 15: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, 09:38
  5. Ist das zuprogrammieren möglich ???
    Von Skull im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 21.08.2004, 13:13

Berechtigungen

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

LiFePO4 Speicher Test