Forum: Mikrocontroller und Digitale Elektronik Frage zum Zugriff eines Strukturelements


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von M. G. (ixil96)


Bewertung
0 lesenswert
nicht 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


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Wie wende ich hier strcpy richtig an? Kannst du mir bitte eine Beispiel 
geben?

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.