wenn ich den struct so definiere kommt nur müll raus.
wenn ich es aber normal definiere anstelle von test4 z.B: 10
funktioniert alles bestens.
Das Problem ist ich muss die Daten in den struct von einer SD Karte
lessen und ich weiss nicht wieviele es sind. also muss es dynamisch
sein.
Mache ich etwas falsch da oder muss ich eine andere funktion anstelle
von sizeof() aufrufen???
Danke im Voraus
Milan
milan schrieb:> Das Problem ist ich muss die Daten in den struct von einer SD Karte> lessen und ich weiss nicht wieviele es sind. also muss es dynamisch> sein.
geneau deswegen schreibt man eine parser der die passenden daten
raussucht
wenn mal blödsinn drinsteht schriebt er sonst gnadenlos ins nirvana
Hallo zusammen,
danke für die Antworten.
Also das rainschreiben von Daten ist nicht das Problem.
NUR DIE DEKLARATION VON STRUCT!
weil es eben dynamisch ist.
1
structperson
2
{
3
unsignedlongintnr;
4
charname[50];
5
uint16_tid;
6
chartest[50];
7
chartest1[20];
8
boolNS;
9
};
10
11
intmain(void)
12
{
13
uint16_ttest4=1;
14
15
structpersoneins[test4];
16
17
eins[test4-1].nr=test4-1;
18
strcpy(eins[test4-1].name,"name");
19
eins[test4-1].id=test4+20;
20
strcpy(eins[test4-1].test,"test");
21
strcpy(eins[test4-1].test1,"test1");
22
eins[test4-1].NS=TRUE;
23
while(test4<=10){
24
test4++;
25
structpersoneins[test4];
26
27
eins[test4-1].nr=test4-1;
28
strcpy(eins[test4-1].name,"name");
29
eins[test4-1].id=test4+20;
30
strcpy(eins[test4-1].test,"test");
31
strcpy(eins[test4-1].test1,"test1");
32
eins[test4-1].NS=TRUE;
33
}
34
//ausgabe
35
}
so wenn ich jetzt die daten ausgeben will kommt zB: bei
eins[test4-1].name
"nast1" also name + test1 halb/halb ich weiss aber nicht warum.
wenn ich es aber ohne while schleife mache und 10 struckts von hand
einschreibe dan geht es ohne probleme!
Gruss
Milan
milan schrieb:> Hallo zusammen,> danke für die Antworten.>> Also das rainschreiben von Daten ist nicht das Problem.>> NUR DIE DEKLARATION VON STRUCT!
Nein.
Dein ganzer Ansatz ist Blödsinn. Du erwartest da etwas zuviel davon,
dass du Arrays seit C99 auch dynamisch zur Laufzeit mit erinem
Maximalindex festlegen kannst.
> while(test4<=10) {
ein neuer Block beginnt
> struct person eins[test4];
eine neue Variable namens 'eins' wird innerhalb des Blocks erzeugt.
Datentyp 'Array von struct person', Größe des Arrays: soviele wie in
test4
> .....> }
der Block endet. Die innerhalb der Blocks erzeugte Variable namens
'eins' wird zerstört.
Wenn du Daten global aufheben willst, dann musst du entweder dynamisch
mittels malloc reservieren bzw vergrößern (was auf einem kleinen AVR aus
verschiedenen Gründen nicht sinnvoll ist) oder du einigst dich mit dir
selbst auf eine maximale Arraygröße und lebst mit der.
> int main (void)> {> ....> struct person eins[test4];>> ....> while(test4<=10) {> ....> struct person eins[test4];
Die zweite Variable 'eins' istr NICHT identisch mit der ersten. Das ist
eine davon völlig unabhängige Variable. Du kannst ein einmal auf diese
Art erzeugtes Array nicht nachträglich in der Größe ändern. Egal wie oft
du C-Regeln verletzt und in Arrays 'Out of Bounds' zugreifst.
Hallo Karl,
danke für deine Antwort.
ok, jetzt habe ich es kapiert.
Was würdest du mir empfehlen, bei der Aufgabenstellung:
ich habe daten auf einer SD Karte die ich einlessen muss, und aufteilen.
Die Daten auf der Karte sehen so aus.
Name1,12345,test,test1,TRUE
Name2,67890,rot,blau,FALSE
.....
ich muss permanent auf die Daten zugreifen können ohne jedes mahl die
karte auszulessen.
Gruss
Milan
milan schrieb:> Hallo Karl,> danke für deine Antwort.>> ok, jetzt habe ich es kapiert.>> Was würdest du mir empfehlen, bei der Aufgabenstellung:
Auf einem kleinen µC, wie zb den Megas?
Array mit einer Maximalgröße festlegen und damit leben. Je nachdem,
weiviel SRAM dann am Ende noch übrig bleibt, die Arraygröße entsprechend
hochschrauben, so dass das SRAM ausgenutzt wird.
Mehr geht sowieso nicht: Wenn das SRAM voll ist, dann ist es voll.
Auf einem PC: nicht päpstlicher als der Papst sein und Speicher mittels
malloc allokieren bzw. mittels realloc vergrößern.
milan schrieb:> kann man den SRAM vergrössern?? Wenn ja, wo kann man es kaufen?
Warum willst du es vergrößern? Du bist doch vom Anfang an davon
ausgegangen, dass die Daten ins RAM passen. Warum passen sie jetzt
plötzlich nicht mehr?
smoerre schrieb:> milan schrieb:>> kann man den SRAM vergrössern?? Wenn ja, wo kann man es kaufen?>> Warum willst du es vergrößern? Du bist doch vom Anfang an davon> ausgegangen, dass die Daten ins RAM passen. Warum passen sie jetzt> plötzlich nicht mehr?
Weil ich für test nur 5 structs von hand geschrieben habe und in der
wirklichkeit könnten es 100-te sein.
smoerre schrieb:> Du verfolgst einen komplett falschen Ansatz. Überdenke dein Konzept.
hehe da bin ich gerade dabei. leider war das ganze programm fertig und
jetzt kann ich alles von vorne anfangen. SUPER!