array in string oder so

Gast #1818212
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.