Forum: Compiler & IDEs pointer in struct inkrementieren


von mbw (Gast)


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!

von Karl H. (kbuchegg)


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
}

von mbw (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

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.