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ß
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
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ß
Probier mal folgendes:
1 | daten[0] = (unsigned char) 0x33; |
Eventuell wird Dein Hex-Wert als 16-Bit-Int interpretiert. Rick
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
Hallo Warnungen bekomme ich keine. Aber das mit den noch nicht bekannt hört sich gut an. Gleich mal nachschauen- ;-) Gruß
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.
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ß
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
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ß
vielleicht weil 1,2,3,4 keine char sind, oder eher keine '1', '2' ;-) versuche es mal jetzt, werde dann klappen!! Gruß
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
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ß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.