Forum: Mikrocontroller und Digitale Elektronik Frage zum Zugriff eines Strukturelements


von M. G. (ixil96)


Lesenswert?

Hallo,

ich spiele gerade etwas mit Strukturen herum und habe eine Frage zur 
Initialisierung eines Strukturelements.

In der letzten Zeile in main() möchte ich im ersten Array das 
Strukturelement station initialisieren. k[0].station = "Hans"; 
funktioniert aber nicht.

z.B.: Sample a = {10, 20.5f, "Franz"}; funktioniert aber!

Wie kann ich das machen?

1
#include <avr/io.h>
2
#include <stdio.h>
3
#include <string.h>
4
5
struct Sample
6
{
7
  int time;      // 2 Bytes für int
8
  float temperature;  // 4 Bytes für float
9
  char station[6];  // 6 Bytes für char
10
};
11
12
typedef struct Sample Sample; 
13
14
int main(void)
15
{
16
  Sample a = {10, 20.5f, "Franz"};
17
    
18
  Sample k[5];        // Array vom Typ Sample
19
  k[2].time = 4;
20
  k[3].temperature = 10.8f;
21
  k[0].station = "Hans";    // ???
22
}

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

M. G. schrieb:
> habe eine Frage zur Initialisierung eines Strukturelements.
>
> In der letzten Zeile in main() [...]

Formal ist das keine Initialisierung, sondern eine Zuweisung.  Eine 
Initialisierung geschieht zusammen mit der Definition, z.B. in

>   Sample a = {10, 20.5f, "Franz"};

> [...] möchte ich im ersten Array das Strukturelement station
> initialisieren. k[0].station = "Hans"; funktioniert aber nicht.

Das ginge dann, wenn .station von Typ "const char*" wäre.  Da es aber 
kein Zeiger ist sondern ein Array, geht es hier nur per strcpy oder 
ähnlicher Funktionen.

: Bearbeitet durch User
von M. G. (ixil96)


Lesenswert?

Wie wende ich hier strcpy richtig an? Kannst du mir bitte eine Beispiel 
geben?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

M. G. schrieb:
> Wie wende ich hier strcpy richtig an?

Genauso, wie Du strcpy mit char-Arrays verwendest, die nicht Elemente 
einer Struktur sind.

Da gibt es keinen Unterschied. Das erste Argument ist das Ziel, das 
zweite die Quelle.

Und - darauf musst Du IMMER achten, das Ziel muss ausreichend Platz für 
den kopieren String haben. strcpy prüft das nicht, es kann das auch gar 
nicht.

Zum Platz ist hier immer die abschließende '\0' mitzuzählen - Dein 
char-Array mit sechs Elementen kann also maximal eine Zeichenkette mit 
fünf darstellbaren Zeichen aufnehmen. "Hans" passt, "Horst" passt, aber 
"Andrea" passt nicht.


Das alles aber steht in Deinem C-Buch drin.

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.