mikrocontroller.net

Forum: Compiler & IDEs array in string oder so


Autor: NullAhnung (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich habe keine Ahnung was ich hier mache aber ich will dass es 
funktioniert.

Ich habe eine "variable" eingestellt die verschiedenen Text beinhaltet, 
mal diesen, mal jenen.

   char display_buffer[80];

Jetzt habe ich da eine Funktion zusammengeschustert um eigene Zeichen im 
Display zu definieren.

   lcd_character_set(zeichen, pattern);

Jetzt will ich in display_buffer folgendes unterbringen:

   display_buffer[0] = 0x08;
   display_buffer[1] = 0x14;
   display_buffer[2] = 0x08;
   display_buffer[3] = 0x00;
   display_buffer[4] = 0x00;
   display_buffer[5] = 0x00;
   display_buffer[6] = 0x00;
   display_buffer[7] = 0x00;

Ich will da aber nicht so ein Monster im Quellcode stehen haben sondern 
hätte gerne soetwas wie das hier:

   display_buffer = { 0x08, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 };

Damit ich dass der zuvor beschriebenen Funktion in dieser Art hier 
übergeben kann:

   lcd_character_set(0x00, display_buffer);

Wenn ich eine weitere variable deklariere funktioniert das, also so:

  char my_pattern[8] = { ... };

Kann mir mal jemand sagen wie ich mir das mit der variablen 
display_buffer zurechtzaubern kann. Ich bin fest davon überzeugt, dass 
das funktionieren kann ohne eine weitere Variable deklarieren zu müssen.

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
NullAhnung schrieb:
> Kann mir mal jemand sagen wie ich mir das mit der variablen
> display_buffer zurechtzaubern kann. Ich bin fest davon überzeugt, dass
> das funktionieren kann ohne eine weitere Variable deklarieren zu müssen.

Tja, C teilt deine Überzeugung aber leider nicht. Arrays können nicht 
einfach als ganzes zugewiesen werden, nur als Initialisierung bei der 
Definition geht das.

Die einzige Möglichkeit wäre mit memcpy() aus string.h und einem 
Stringliteral:
memcpy(display_buffer, "\x08\x14\x08\x00\x00\x00\x00\x00", 8);

Wirklich schön ist das aber IMO nicht.

Andreas

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im ANSI-Standard wird es schwierig, aber der gcc ist schlauer:
  char display_buffer[80];
  // kopiert 8 Zeichen
  memcpy( display_buffer,
          (char[]){ 0x08, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 },
          8
          );

  // kopiert inkl. abschließender 0, also 4 Zeichen:
  strcpy( display_buffer,
          (char[]){ 0x08, 0x14, 0x08, 0x00 }
          );

Siehe 
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Compou...

PS: Die Frage ist, ob es wirklich sinnvoll ist, dauernd Strings 
herumzukopieren.

Mit einem char*, das mal auf den einen und mal auf den anderen String 
zeigt, kommt man meist schneller ans Ziel.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.