Verständnisfrage char array
-
Hiho

Ich schau mir gerade die arrays an und hab da mal folgenden code gebastelt
#include<iostream.h> int main() { char a[3][1]; int i; int y; for (i=0;i<3;i++) { for (y=0;y<1;y++) { cin>>a[i][y]; } } for (i=0;i<3;i++) { for (y=0;y<1;y++) { cout<<a[i][y]<<"\n"; } } cout<<"\n\n\n"<<a[0][0]; cout<<"\n\n\n"<<a[1][0]; cout<<"\n\n\n"<<a[2][0]; cout<<"\n\n\n"<<a[0][1]; cout<<"\n\n\n"<<a[1][1]; cout<<"\n\n\n"<<a[2][1]; cin.get(); }Wenn ich da als erstes "d" eingebe, als zweites "a" und als drittes "s", dann kommt aus dem Schleifen-cout "das" raus. So weit, so gut.
Allerdings kommt bei den unteren cout folgendes raus
d a s a s
Jetzt frag ich mich warum bei a[0][1] kein Ergebnis kommt

-
Schau mal, wie viel dort überhaupt erlaubt ist. Ein Array, dass [n] Werte hat, hat einen Wertebereich von 0 bis n-1. In der ersten Dimension hast du es richtig gemacht in der zweiten nicht..
-
Das war schon absicht. Ich wollte halt sehen was passiert. Seltsam ist doch, dass bei 1,1 und bei 2,1 ein Ergebnis kommt. Dürfte ja doch dann auch nicht sein weil außerhalb vom array.
-
Andi S schrieb:
Das war schon absicht. Ich wollte halt sehen was passiert. Seltsam ist doch, dass bei 1,1 und bei 2,1 ein Ergebnis kommt. Dürfte ja doch dann auch nicht sein weil außerhalb vom array.
Zugriff ausserhalb der Grenzen ist undefiniert. Da kann passieren was dem Programm grad gefällt. Es kann auch die Welt untergehen, wäre auch korrekt. Grenzen werden nicht automatisch geprüft.
Grüssli
-
Falls nichts passiert, hängt die Ausgabe halt davon ab, was dort im Speicher steht (stehen würde). Es kann auch eine Zugriffsverletzung stattfinden. Besonders fies ist aber, wenn nichts passiert, aber andernorts Daten überschrieben werden. Dann gestaltet sich die Fehlersuche sehr mühsam, weil 1. das erzeugte Verhalten nicht reproduzierbar ist und 2. der eigentliche Fehler weit entfernt von den daraus entstandenen Auswirkungen aufgetreten sein kann.
Aber prüf deine Indizes und lass es gar nicht drauf ankommen. Allein schon weil bei dem Versuch die Welt untergehen könnte. :p
-
Ich habs mal erweitert
#include<iostream.h> int main() { char a[3][2]; int i; int y; for (i=0;i<3;i++) { for (y=0;y<2;y++) { cin>>a[i][y]; } } for (i=0;i<3;i++) { for (y=0;y<2;y++) { cout<<a[i][y]<<"\n"; } } cout<<"\n\n\n"<<a[0][0]; cout<<"\n\n\n"<<a[1][0]; cout<<"\n\n\n"<<a[2][0]; cout<<"\n\n\n"<<a[0][1]; cout<<"\n\n\n"<<a[1][1]; cout<<"\n\n\n"<<a[2][1]; cout<<"\n\n\n"<<a[0][2]; cout<<"\n\n\n"<<a[1][2]; cout<<"\n\n\n"<<a[2][2]; cin.get(); }und das kommt dabei raus
......0... 1... 2
0... d... a... s1... s... d... a
2... a... s
Und hier fehlt auch das "d". Vorhin war es
.....0... 1... 2
0... d... a... s
1........ a... s
Irgendwie sieht das nach Plan aus
