Der Martin: C struct array kopieren

Beitrag lesen

Hallo Mark,

struct eintrag

{
char name[40];
char vorname[20];
char nummer[20];
};

  
warum markierst du einen C-Codeauszug hier im Posting als "PHP" anstatt als C? ;-)  
  

> ~~~c

for(int j=d-1; j<i; j++)  

> {  
> telefonliste[j].name=telefonliste[j+1].name;  
> telefonliste[j].vorname=telefonliste[j+1].vorname;  
> telefonliste[j].nummer=telefonliste[j+1].nummer;  
> }

Das geht so natürlich nicht, denn <eintrag>.name ist ja kein Basisdatentyp, sondern ein Array.

Leider gibt mir der Compiler einen Fehler ('=': Linker Operand muss ein L-Wert sein).

Ja. Mit L-Wert oder LValue meinen die Compiler einen Ausdruck, dem man einen Wert zuweisen kann. Es muss deshalb ein Ausdruck sein, der zum einen auf eine Speicheradresse verweist, zum anderen eine Information über den Datentyp enthält. Ein void* verweist beispielsweise eindeutig auf eine Speicheradresse, hat jedoch keine Typinformation und ist somit kein LValue.

In deinem Fall ist ein char[] zwar technisch gesehen ein LValue, aber in C kann man nur Basistypen direkt zuweisen. Um ein ganzes Array zu kopieren, muss man jedes Element (in deinem Fall: jedes Zeichen) einzeln anfassen.

Zum Glück gibt es aber fertige Funktionen dafür. Die Funktion memcpy() und ihre Derivate könnten dich interessieren; wahrscheinlich sogar noch eher strcpy() und seine Verwandten, vorzugsweise strncpy(). Mit memcpy() könntest du allerdings auch die gesamte Struktur auf einmal kopieren.

So long,
 Martin

--
Wer im Glashaus sitzt, sollte Spaß am Fensterputzen haben.