Christoph Zurnieden: struct an fuction: habs rausgefunden

Beitrag lesen

Hi,

man sollte es ja eigentlichnicht tun, aber bevor's noch falsch im Forum steht.

Man muss eine temporäre Instanz des structs innerhalb der aufgerufenen Funktion erzeugen

Nein, _muß_ man nicht.

foo(struct meinstruct temp[10])
{
};

Besser wäre es, einfach nur einen Zeiger zu übergeben:

---snip---
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct list_t{
  char number[5];
  struct list_t *next;
} list;

void foo(struct list_t *list){
  while(list != NULL){
    printf("%s\n",list->number);
    list = list->next;
  }
}

int main(){

list *start = NULL, *next = NULL;
  char *liste[] = {
                   "eins",
     "zwei",
     "drei",
     "vier",
     };
  int i = 0;

/* allozieren des nötigen Speichers */
  start = malloc(sizeof(struct list_t));
  if(start == NULL){
    fprintf(stderr,"malloc() failed at %d\n",__LINE__);
    exit(EXIT_FAILURE);
  }
  /* Setzen eines Zeigers darauf*/
  next = start;

/* Füllen des Inhalts */
  strcpy(next->number, liste[i]);

/* Füllen des restlichen Inhalts */
  for(i = 1;i<3;i++){
    next->next = malloc(sizeof(struct list_t));
    if(next->next == NULL){
      fprintf(stderr,"malloc() failed at %d\n",__LINE__);
      exit(EXIT_FAILURE);
    }
    next = next->next;
    strcpy(next->number, liste[i]);
  }
  /* Abschließen der Liste */
  next->next = NULL;

/* Setzen des Zeigers "next" auf die Startposition der Liste */
  next = start;

/* Übergabe dieses Zeigers an die Funktion foo(struct list_t *list) */
  foo(next);

exit(EXIT_SUCCESS);
}
---snap---

so short

Christoph Zurnieden