- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 21

Thema: String Array

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.685

    String Array

    Wie kann ich verschiedene (gleich lange) Strings in einem Array so ablegen, dass ich sie mit einem Pointer, z.B. txtptr {1..4} anwählen kann. Derzeit verwende ich z.B. einzelne Strings der Art:

    Code:
      unsigned char ML1[]   EEMEM = "Taster gedrückt!";     // Meldetext
    die ich natürlich mit dem expliziten Namen ML1 oder so aufrufen muss.

    Suche etwas wie dies
    ??? EEMEM = " auf "
    ??? EEMEM = " ab "
    ??? EEMEM = " zu "
    ??? EEMEM = "mist "

    mit dem jeweils gleichen Namen, aber einem wählbaren Pointer : emma[2]. Entsprechende Felder mit Zahlen bekomme ich ja hin:

    Code:
    uint16_t ESeroff[]    EEMEM = { 0,   0,0,0, 0,0,0, 0,0,-12, 19,   0,   0 } ;
    Seit Tagen Suche ich immer wieder nach ner Lösung mit Strings statt Zahlen, finde in keinem Tutorial und nicht im K&R etwas hilfreiches. Etliche Experimente sind fehl geschlagen.

    Danke für Hilfe
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Ich glaube deine Frage zu verstehen und versuche daher mal eine Antwort.

    Es gibt keinen Datentyp string in C. In anderen Sprachen schon. Als String wird in C ein Array of Chars bezeichnet. Was du also brauchst ist ein Array of Arrays of Chars, anders gesagt ein zweidimensionales Array of Chars, etwa so:

    char Texte[5][10];

    Das sind 5 Texte mit einer jeweiligen Länge von maximal 9 Zeichen plus der Endekennung durch '\0'.

    Wie geht man damit um? Hier ein Beispiel:
    Code:
    char texte[][10] = {"eins", "zwei", "drei"};
    
    int main(int argc, char** argv) {
    
        printf("%s\n", texte[1]);
    
        strcpy(texte[1], "neu");
    
        printf("%s\n", texte[1]);
    }
    Dazu ein paar Bemerkungen: Die erste Dimension des zweidimensionalen Arrays kann man sich vom Compiler auszählen lassen, daher ist beim Initializer die erste eckige Klammer leer. Die zweite muß man selber einsetzen. Sie muß so groß sein, daß der längste Text (plus '\0') reinpasst.

    So wie bei char Text[10], Text die Adresse des Anfangs des Arrays ist, die man z.B. mit printf("%s", Text) ausgibt, ist texte[1] die Adresse des zweiten Char-Arrays oder Strings.

    Ich bin sicher nicht der große Lehrbuchschreiber, hoffe aber doch daß ich das verständlich formuliert habe und daß es dein Problem trifft.

    Achso, die Ausgabe des obigen Programms ist:

    zwei
    neu

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.685
    Zitat Zitat von Klebwax Beitrag anzeigen
    ... hoffe .. verständlich formuliert habe und daß es dein Problem trifft ...
    Danke Klebwax; immerhin bist Du auf dem besten Weg zum großen Lehrbuchschreiber *kompliment* - es funktioniert wirklich gut. Danke für die schnelle Hilfe und diese wirklich saubere, verständliche Beschreibung - komplett mit Anwendungsbeispiel. Ich hatte (schon mal als grundlegenden Fehler, trotz K&R-Nachhilfe) beim zweidimensionalen Array schon mal die Koordinaten verwechselt :-/ - aber dank Deiner Ausführung klappte es praktisch schon auf Anhieb. Vielen Dank, hat mir wieder mal STUNDEN gespart.
    Anmerkung: die zitierten Codezeilen stammen aus verschiedenen Modulen, ich hoffe, dass die Lösung/Problematik trotzdem klar dargestellt wird.

    Code:
    //   -  -  -  -  -  -  -  -  -  -
      char SVdef [][6]
            EEMEM = {  "     ", "Ko+/-", "Kor/l", "KoNir", "KoNil",
                       "ADeur", "ADeul", "     ", "ADe o", "Au rl", "Au +-" } ; //   -  -  -  -  -  -  -  -  -  -
      void UART0_eep_string( char data [6] ) ;      // EEPROM-String an UART0
    //   -  -  -  -  -  -  -  -  -  -
    // ============================================================================== =
    // ==   Ausgabe Text aus EEPROM an UART0
    // ============================================================================== =
     void UART0_eep_string( char data [6] )
     {                              //
      char c;              
      while(1)                      // String *data an UART0
      {                             //
        c = eeprom_read_byte(data); //
        if ( c == 0 ) return;       //
        uputchar0 ( c );            // Ein Zeichen an UART0
        data++;                     //
      }                     // Ende while(1)
     }              // Ende void UART0_eep_string(const unsigned char *data)
    // ============================================================================== =
    // ============================================================================== =
    //   -  -  -  -  -  -  -  -  -  -
    // ... im Main/
      UART0_eep_string(SVdef [5]);
    //...
    bringt ins Terminalfenster
    ............ADeur

    Und das trotz Warnungen. Da ich Warnungen selbst in minimaler Anzahl hasse bitte ich um weitere Hilfe/Aufklärung.
    Code:
    ../KoCo_inf15.c: In function 'uart0_eep_string':
    ../KoCo_inf15.c:89: warning: pointer targets in passing
    ...... argument 1 of '__eerd_byte_m1284p' differ in signedness
    Build succeeded with 1 Warnings...
    
    function 'uart0_eep_string':
    ../KoCo_inf15.c:89:
        c = eeprom_read_byte(data); //
    Das krieg ich nicht gebacken. Hoffentlich habe ich trotz der Knappheit alles Wesentliche zum Fehler dargestellt.

    Danke im Voraus für die Hilfe.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Was ist das Datentyp von data in den Funktion eeprom_read_byte(data)? Schau uns bitte mal den Funktion Header davon.

    Data ist ein char. Aber laut den Warnung könnte eeprom_read_byte ein signed char erwarten.
    Geändert von Valen (20.03.2013 um 11:41 Uhr)

Ähnliche Themen

  1. String nach Array umwandeln (?)
    Von slavezero im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 07.06.2012, 18:21
  2. Zahl in String/Array schreiben
    Von Steffen08 im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 24.02.2009, 12:10
  3. Array zweidimensional für String
    Von elko68 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 30.12.2008, 20:19
  4. Array ---> String
    Von Thinker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 23.01.2007, 10:06
  5. String-Array in C
    Von Guy im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 13.12.2006, 15:49

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests