Seite 1 von 1

Fehler beim Schreiben in String Arrays in C

Verfasst: Do Dez 05, 2019 6:40 pm
von Fuchs
Hallo alle zusammen,

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

Re: Fehler beim Schreiben in String Arrays in C

Verfasst: Fr Dez 06, 2019 12:28 am
von Xin
Dein Teile Array ist pro Eintrag 10 Zeichen lang.
Kopierst Du 10 Zeichen in Eintrag 4, kommt das Nullbyte an Stelle 11. Die gibt es aber nicht. Du überschreibst damit das erste Zeichen von Eintrag 5. Wenn Du anschließend Eintrag 5 mit z2 setzt, überschreibst Du das Nullbyte.
Eintrag 5 gibt es auch nicht.
C zählt von 0 beginnend. Deine Einträge bei Teile sind also von Index 0 bis 4, nicht von 1 bis 5.