Arbeiten mit Arrays

Gast #364621
Lesenswert?
• ▲
▼
Hallo

Habe ein Problem mit den Arrays.
Ich richte eine Arrays ein.

char daten[8] = { 1, 2, 3, 4, 5, 6, 7, 8};  //=> sollten doch 8*8bit
sein,

//Inhalt 1 ,2, 3, 4, 5, 6, 7, 8   i.O.

Wenn ich aber nun mit der Anweisung einen Wert hineinschreibe (erste
Zeile) bekomme ich immer die zweite Zeile raus.

daten[0] = 0x33;

//Inhalt 33, 0, 3, 4, 5, 6, 7, 8  n.i.O

Kann mir einer weiterhelfen.

Gruß
Gast #364622
Lesenswert?
• ▲
▼
char daten[8] = { 1, 2, 3, 4, 5, 6, 7, 8};

also steht dass so in deinem Array:
daten[0] --> 1
daten[1] --> 2
daten[2] --> 3
daten[3] --> 4
usw.

und dann schreibst du in das Array:
daten[0] --> 33
daten[1] --> 0

Vielleicht hast du nicht daran gedacht, dass du zwar mit
char daten[8] = { 1, 2, 3, 4, 5, 6, 7, 8};
ein Array mit 8 Stellen eröffnest, aber die Stellen werden von
0 ... 7 gezählt.

Gruß Elektrikser
Gast #364623
Lesenswert?
• ▲
▼
Hallo

Nein leider nicht
Ich habe in den Ausgangszustand nur einmal mit
daten[0] = 0x33;
etwas geändert.

Danach ist der Inhalt (Angefangen mit Index 0 bis Index 7)
33, 0, 3, 4, 5, 6, 7, 8


Gruß
#364625
Lesenswert?
• ▲
▼
Irgendwelche Warnungen beim Compilieren?

Das sieht danach aus, dass beim Compilieren der Zeile
  daten[0] = 0x33;
daten noch nicht bekannt ist.

Die Lösung von Rick kann (u.U.) zwar funktionieren, ist aber (meiner
Meinung nach) nicht die ganz saubere Art.

Gruß, Stefan
#364627
Lesenswert?
• ▲
▼
Poste mal mehr Code.
Das von Dir beschriebene Verhalten ist so nicht möglich,
es sei denn der Compiler hätte einen schweren Fehler.
Ist aber eher unwahrscheinlich. Viel wahrscheinlicher ist,
es, daß Dein Programm einen schweren Fehler enthält. Der
muß noch nicht mal etwas mit diesem Array zu tun haben.
Denk immer daran: Was Du siehst sind die Symptome, nicht die
Ursachen. Wir müssen aber die Ursachen finden um den Fehler
auszumerzen.

Daher: Poste mehr Code. Im Idealfall hast Du ein kleines,
vollständiges Testprogram, welches ganau diesen Fehler
zeigt.
Gast #364628
Lesenswert?
• ▲
▼
Hallo

Habe den Fehler gefunden.
Ich traue mich garnicht ihn zu posten. ;-)
Ich habe mit den Befehl
char daten[8] = { 1, 2, 3, 4, 5, 6, 7, 8};
zwar die Variable angelegt.
Die Funktion zum füllen der Variable war aber in einer externen Datei.
Die Variable war mit dem Befehl
extern daten[8];
bekannt gegeben.
Da hat er also mit 16 bit gerechnet.

Aber danke für eure Hilfe

Gruß
#364629
Lesenswert?
• ▲
▼
Kleiner Tip, damit das nicht nochmal vorkommt:

extern NUR in .h Dateien verwenden.
Die .h Datei AUCH in der Datei einbinden, in der die
Original-Deklaration steht. Also z.B.:

my_data.h:
----------
extern char data[8];

my_data.c:
----------
#include <my_data.h>
char data[8] = {1,2,3,4,5,6,7,8};

main.c:
----------
#include <my_data.h>
  data[0] = 0x30;

Ist die Definition in der .h-Datei dann unterschiedlich als im .c-File,
wird ein Fehler gemeldet.

Übrigens:
Ganz sicher hat Dein Compiler das Verwenden von data ohne Deklaration
mit einer Warnung quittiert. Allerdings kann diese Warnung sehr leicht
übersehen werden, wenn mit make gearbeitet wird:
Enthält eine C-Datei "nur" eine Warnung, wird sie beim nächsten
make-urchlauf nicht mehr neu übersetzt. Die Warnung siehst Du also nur
einmal, nicht bei jedem make (im Gegensatz zu Fehler-Meldungen).

Abhilfe:
Bei unerklärlichen Fehlern ein make clean ausführen. Danach werden alle
Dateien neu compiliert - und alle Compiler-Warnungen tauchen auf.

Gruß, Stefan
Gast #364630
Lesenswert?
• ▲
▼
Hallo Stefan,

meckert dann nicht der Compiler wenn ich main.c compiliere.
Oder geht das doch, weil die Datei durch include 1:1 vor die Anweisung
eingefügt wird.
Muß ich dann noch im makefile noch die my_data.c mit zum compilieen mit
angeben?

Gruß
#364632
Lesenswert?
• ▲
▼
Hallo Wolf,

??? - verstehe die Frage nicht ganz.
Hat Dich mein Telegrammstil verwirrt? Natürlich steht in main.c  noch
diverses anderes ... , z.B.:

#include <my_data.h>
...

main(void){
  ...
  data[0] = 0x30;
  ...

> Muß ich dann noch im makefile noch die my_data.c mit zum compilieen
> mit angeben?

Klar, wie gehst Du sonst mit der von Dir erwähnten "externen Datei"
um?

Gruß, Stefan
Gast #364633
Lesenswert?
• ▲
▼
Hallo Stefan,

ich habe sie auch mit
#include <my_data.c>
eingebunden.
Ich glaube dann sollte ich etwas umstellen.
Das heist aber, das ich von allen eingebundenen Dateien nur die **.h
mit in die main.c einbinde.
Und im Makefile die **.c mit angebe.


hallo Beni,
das mit den 1,2,3,4 hat auch hingehaut.

Gruß

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.