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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren