Forum: Compiler & IDEs array in string oder so


von NullAhnung (Gast)


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.

von Andreas F. (aferber)


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

von Klaus W. (mfgkw)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.