Frage zum Zugriff eines Strukturelements

OP #5278663
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
}
Persönliche Seite #5278671
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.
Persönliche Seite #5278683
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.

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