array in string oder so

Gast #1818212
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.
#1818224
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:
1
memcpy(display_buffer, "\x08\x14\x08\x00\x00\x00\x00\x00", 8);

Wirklich schön ist das aber IMO nicht.

Andreas
#1818708
Lesenswert?
• ▲
▼
Im ANSI-Standard wird es schwierig, aber der gcc ist schlauer:
1
  char display_buffer[80];
2
  // kopiert 8 Zeichen
3
  memcpy( display_buffer,
4
          (char[]){ 0x08, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 },
5
          8
6
          );
7

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

Siehe 
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Compound-Literals.html#Compound-Literals

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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.