habe vor kurzem angefangen mich mit dem Programmieren in C auseinader zu setzen und habe hier mal versucht ein Programm zu schreiben, welche eine Nachricht (NACHRICHT) in vorgegebene Teilgrößen zerlegt und jerweil in einen String in Teile [][] schreibt. Im Folgenden erstmal der Code:
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define NachrichtAnzl 5 /* Nachrichtenanzahl = Anzahl der Nachrichten -1 */
#define NACHRICHT "+z@97USNULNutz_Datenz2"
int main(void){
uint32_t i; /*Zähler äußere Schleife */
uint32_t j; /*Zähler innere Schleife */
uint32_t start[] = {0, 2, 4, 7, 10, 20}; /* Startpunkte für die äußere Schleife*/
uint32_t ZeichenAnzl[] = {1, 1, 2, 2, 9, 1}; /* Zeichenanzahl pro Paket */
uint8_t NachrichtPaket[] = NACHRICHT; /* Hier kann auch direkt der String eingetippt werden. Ausgabe gleich. */
char *ptr; /*Pointer äußere Schleife. Zum Setzen des Startpunktes der inneren Schleife */
char *ptr2; /*Pointer innere Schleife. Zum Durchlaufen der Buchstabenanzahl */
uint8_t Teile[NachrichtAnzl][10];
/* Äußere Schleife. Setz den Pointer ptr nach jedem Durchlauf an die Stelle des nächsten Nachrichtenanfangs */
for(i = 0; i <= NachrichtAnzl; i++){
/* ptr wird die Adresse des ersten Elementes zugewiesen und falls i > 0 ist, wird der Pointer um start[i] verschoben*/
ptr = &NachrichtPaket[0] + start[i];
/* setzte ptr2 an Anfang des aktuellen Nachrichtenpaketes*/
ptr2 = ptr;
/* innere Schleife durchläuft die Anzahl der aktuellen Nachricht. Vorgegeben durch BuchstabenAnzl */
for(j = 0; j <= ZeichenAnzl[i]; j++){
Teile[i][j] = *ptr2;
ptr2++;
}
/* schreibe ein \0 ans Ende des Strings */
Teile[i][ZeichenAnzl[i] + 1] = NULL;
}
printf("%s\n", Teile);
printf("%s\n", Teile[1]);
printf("%s\n", Teile[2]);
printf("%s\n", Teile[3]);
printf("%s\n", Teile[4]);
printf("%s\n", Teile[5]);
return 0;
}
Aufgabe:
+z
@9
7US
NUL
Nutz_Datenz2
z2
-----------------------------------------
Alles ist soweit auch in Ordnung, bis auf die die Ausgabe mit dem Inhalt "Nutz_Datenz2". Dort sollte eigentlich nur "Nutz_Daten" stehen.
Es scheint zum Problem zu werden, wenn die Zeichenanzahl 10 ist, weil dort "Nutz_Date" steht, wenn ich ZeichenAnzl[4] = 8 setzte statt 9.
Jemand ne Idee? Ich weiß da nicht mehr weiter und es macht mich wahnsinnig.
ps: Es geht dabei nicht darum, dass man das auch einfacher mit strncpy oder Ähnlichem ginge.
Danke schon mal