mikrocontroller.net

Forum: Compiler & IDEs pointer in struct inkrementieren


Autor: mbw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abend, ich habe folgendes Problem: ich habe ein Array aus Pointern auf 
structs, in diesen sind wiederum arrays (strings). Diese möchte ich 
gerne einfach inkrementieren, um so (wie üblich) den String zu 
durchlaufen.
Hier mal in code, der übersichtlichkeit halber ohne Fehlerbehandlung und 
sonstiges:

struct my_struct {
   char string[16];
};

void my_func( struct my_struct *str )
{
   /* der Teil geht nicht */
   str->string++;
}

void sonstige_func( void )
{
   struct my_struct * struct_array[5];
   struct_array[0] = (struct my_struct *) malloc(sizeof(struct my_struct)));
   my_func(struct_array[0]);
}
gcc schmeisst hier "lvalue required as increment operand". Ich habe 
leider nichts dazu gefunden, was vermutlich auch stark an der 
schwierigen Formulierung der Anfrage liegen könnte...
Schonmal Danke!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mbw schrieb:

> void my_func( struct my_struct *str )
> {
>    /* der Teil geht nicht */
>    str->string++;
> }

Du kannst string nicht inkrementieren!
genausowenig wie du

   char a[5];

   a++;

inkrementieren kannst. a ist ein Array und kein Pointer. Und bei dir ist 
nun mal str->string ein Array und kein Pointer.

> structs, in diesen sind wiederum arrays (strings). Diese möchte ich
> gerne einfach inkrementieren, um so (wie üblich) den String zu
> durchlaufen.

Also so was?
void my_func( struct my_struct *str )
{
  char * pLoop = str->string[0];

  while( *pLoop ) {
    c = *pLoop;
    // mach was mit c
    pLoop++;
  }
}

Autor: mbw (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, da hab ich wohl zu einfach gedacht.
Da müsste dann nur noch der Index weg, dann gehts:
char * pLoop = str->string;

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mbw schrieb:
> Danke, da hab ich wohl zu einfach gedacht.
> Da müsste dann nur noch der Index weg, dann gehts:
>
> char * pLoop = str->string;
> 


Oops, mein Fehler.
Ich hab beim Schreiben nicht mehr auf die Datenstruktur geschaut und in 
Gedanken mit einem

struct my_struct {
   char* string[16];
};

gearbeitet.

Das Prinzip ist aber dasselbe, wie du schon rausgefunden hast.

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.