Frage zu Pointern
-
Hi,
ich hab einen Chararray den ich aus einer Datei eingelesen habe.
Dieses Chararray enthält mehrere Datensätzen von denen ich die am Anfang des Datensatzes einlesen kann. Nun versuche ich das ganze so einzulesen :while (position < laenge){ char frameName[4] ; int frameLaenge; char *frameValue; strncpy(frameName, Content + position, 4); printf("FrameName : %s \t", frameName); frameLaenge = synchSaveToInt(Content[position + 4], Content[position + 5], Content[position + 6], Content[position + 7]); printf("FrameLaenge : %d \t", frameLaenge); strncpy(frameValue, Content + position + 10, frameLaenge); printf("FrameContent : %s \n", *frameValue); position += 10 + frameLaenge; }
Aber beim einlesen des frameContent stürzt er leider ab.
woran kann das liegen?
Gruß SkySurfer
-
strncpy(frameName, Content + position, 4); printf("FrameName : %s \t", frameName);
Ein oft gemachter Fehler: Wie schaut es mit '\0' aus?
char *frameValue; [..] strncpy(frameValue, Content + position + 10, frameLaenge); printf("FrameContent : %s \n", *frameValue);
1. Bei dem printf() gehört kein *
2. Du kopierst Content + position + 10 in frameValue, hast jedoch nicht genug Speicher reserviert. Du schreibst außerhalb deines Speicherbereiches, ergo das Programm stürzt ab.Probier das mal aus:
while (position < laenge){ char frameName[4] ; int frameLaenge; char *frameValue; strncpy(frameName, Content + position, 4); printf("FrameName : %s \t", frameName); frameLaenge = synchSaveToInt(Content[position + 4], Content[position + 5], Content[position + 6], Content[position + 7]); printf("FrameLaenge : %d \t", frameLaenge); frameValue = (char*)malloc(frameLaenge * sizeof(char)); strncpy(frameValue, Content + position + 10, frameLaenge); printf("FrameContent : %s \n", frameValue); position += 10 + frameLaenge; free(frameValue); }
Ich habe aber keinen Plan, ob das auch funktioniert. Mit der dynamischen Speicherverwaltung habe ich noch nie wirklich gearbeitet. Eine Prüfung, ob der Speicher erfolgreich reserviert wurde, würde ich auch noch mochen.
Mehr findest du wie immer in C von A bis Z - Kapitel 16!
-
Ich habe das malloc noch eingebaut, nun stürzt er zwar nicht mehr ab aber ich erhalte die Ausgabe (null) also irgendwo scheint es noch nicht zu stimmen.
Nur wo ?
-
Also ich bin grade etwas ratlos :
char frameValue[frameLaenge]; for (i = 0; i < frameLaenge; i++){ printf("Wert : %d -> %c \n ", i, Content[position + 10 + i ]); frameValue[i] = Content[position + 10 + i]; } printf("FrameValue : %s \n", frameValue); position += 10 + frameLaenge;
ich bekomm die Ausage:
Wert : 1 -> G Wert : 2 -> e Wert : 3 -> h Wert : 4 -> e Wert : 5 -> i Wert : 6 -> m Wert : 7 -> e Wert : 8 -> Wert : 9 -> Z Wert : 10 -> e Wert : 11 -> i Wert : 12 -> c Wert : 13 -> h Wert : 14 -> e Wert : 15 -> n FrameValue :
Wieso ist trotz richtiger Ausgabe frameValue leer
-
Mich irritiert, dass bei
for (i = 0; i < frameLaenge; i++){ printf("Wert : %d -> %c \n ", i, Content[position + 10 + i ]); frameValue[i] = Content[position + 10 + i]; }
du als erste Ausgabe
Wert : 1 -> G
bekommst.
Da müsste als erstes
Wert : 0 -> sonstwas
kommen.
BTW: Kann es sein, dass
Content[position + 10]
0 (Null) ist!?
Greetz, Swordfish
-
Ja darüber hab ich mich auch schon gewundert.
Laut Hexeditor steht von G ein 0x00
-
nimm mal:
for (i = 0; i < frameLaenge; i++){ printf("Wert : %d -> %c \n ", i, Content[position + 11 + i ]); frameValue[i] = Content[position + 11 + i]; }
was in Content steht musst du aber selber wissen!
Greetz, Swordfish
-
Wenn ich bei 11 starte (das Zeichen 0x00 auslasse) geht es.
Das heißt er kann kein 0x00 darstellen ?Ich bekomme jetzt aber am Anfang der Zeilen komische Zeichen dargestellt..
FrameName : TIT2Û☺ FrameLaenge : 16 FrameValue : Geheime Zeichen FrameName : TALB► FrameLaenge : 7 FrameValue : Ninive@
Sobald ich die FrameValue weglasse verschwinden Sie.
while (position < laenge){ char frameName[5] ; int frameLaenge; strncpy(frameName, content + position, 4); if (strcmp(frameName, "")) { printf("FrameName : %s \t", frameName); frameLaenge = synchSaveToInt(content[position + 4], content[position + 5], content[position + 6], content[position + 7]); printf("FrameLaenge : %d \t", frameLaenge); char frameValue[frameLaenge+1]; strncpy(frameValue, content + position + 11, frameLaenge - 1); printf("FrameValue : %s \n", frameValue); } position += 10 + frameLaenge; }
ich hab bei der größe auch schon immer extra +1 gemacht, dass es danach noch ein \0 hat..
-
Gib' mir mal was compilierbares dann wurschtle ich 'mal drüber.
Greetz, Swordfish