pointer in struct inkrementieren

Gast #1924390
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:
1
struct my_struct {
2
   char string[16];
3
};
4

5
void my_func( struct my_struct *str )
6
{
7
   /* der Teil geht nicht */
8
   str->string++;
9
}
10

11
void sonstige_func( void )
12
{
13
   struct my_struct * struct_array[5];
14
   struct_array[0] = (struct my_struct *) malloc(sizeof(struct my_struct)));
15
   my_func(struct_array[0]);
16
}
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!
#1924433
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?
1
void my_func( struct my_struct *str )
2
{
3
  char * pLoop = str->string[0];
4

5
  while( *pLoop ) {
6
    c = *pLoop;
7
    // mach was mit c
8
    pLoop++;
9
  }
10
}
#1924483
Lesenswert?
• ▲
▼
mbw schrieb:
> Danke, da hab ich wohl zu einfach gedacht.
> Da müsste dann nur noch der Index weg, dann gehts:
>
1
> char * pLoop = str->string;
2
>


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

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.