ich versuche gerade durch Beispiele die Benutzung von Zeigern bei zweidimensionalen Arrays zu verstehen.
Also experimentiere ich, teste und hoffe, dass ich Zeiger dadurch endlich verstehen werden.
Ich habe eine Matrix/2D-Array vom Typ char, welches ich mit 4 Daten füttern will. Danach sollen die Daten angezeigt werden. Pro Datensatz maximal 50 Zeichen.
Dieses 2D-Array soll an meine zwei Funktionen übergeben werden, die dann diese Aufgaben erledigen. Ich übergebe an die Funktionen mein Array sowie die Anzahl der Datensätze und deren Länge, damit nur im reserviertem Speicher geschrieben wird.
Das Beispiel habe ich ausgedacht und es funktioniert, ABER sobald die Main-Funktion beendet wird, erhalte ich diese Fehlermeldung:
Und ich verstehe einfach nicht, was ich hier falsch mache.Run-Time Check Failure #2 - Stack around the variable 'daten' was corrupted.
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
void einlesen(char**, int, int);
void ausgeben(char**, int, int);
int main(){
char daten[4][50];
char *pdaten[4];
pdaten[0] = daten[0];
//Matrix mit + beschreiben
for(int i = 0; i<4; i++)
for(int j = 0; j<50; j++)
daten[i][j] = '+';
einlesen(pdaten, 4, 50);
ausgeben(pdaten, 4, 50);
printf("\n");
//system("PAUSE");
return 0;
}
void einlesen(char **arr, int datenanzahl, int zeichenanzahl)
{
int start = 0;
for(int i = 0; i<datenanzahl; i++){
printf("Datensatz:%d ",i);
start+=zeichenanzahl; //springt auf den nächsten Datensatz im Speicher
scanf("%s",(arr[0]+start));
}
}
void ausgeben(char **arr, int datenanzahl, int zeichenanzahl){
int start = 0;
for(int i = 0; i<datenanzahl; i++){
printf("Datensatz:%d ",i);
start+=zeichenanzahl; //springt auf den nächsten Datensatz im Speicher
printf("%s\n",arr[0]+start);
}
}
Code: Alles auswählen
einlesen(daten, 4, 50);
Ich verstehe diese Fehlermeldung nicht - mit dem Zeiger hat es doch funktioniert. Warum ist dann das Array von einem anderen Typ.
Ich gehe davon aus, dass man so etwas viel eleganter und sauberer lösen kann. Aber mir ist es zunächst sehr wichtig zu wissen, was diesen Abstürzt zum Schluss verursacht und warum ich nur einen Zeiger von meinem Array und kein Array selbst an die Funktionen übergeben kann.
Danke!