Forum: Mikrocontroller und Digitale Elektronik Initialisierung Array: Warum erhalte ich undefinierte Zeichen


von Karl (Gast)


Lesenswert?

Hallo,
ich habe ein kurze Frage: Ich möchte gerne in ein Array serielle Daten 
schreiben, die interruptgesteuert mit Hilfe der UART-Lib von 
Peter-Fleury empfange und auslese.

In einer anderen Funktion möchte ich gerne die Daten in ein Array 
schreiben, ergänzen und gleich wieder über den UART ausgeben. Wenn ich 
mein Array (lokal deklariert) time nicht initialisiere erhalte ich am 
Ende der Ausgabe komische Zeichen wie 0xB5, etc.

Wie ist das zu erklären, bzw. wie rutschen da die Zeichen rein?

char time[15];
char cce_time[5];
char utc_time[5];

  strcpy( time, cce_time );
        strcat( time, ":" );
  strncat( time, gps_buffer + 8, 2 );
  time[5] = '\0';
        strcat( time, "p.m." );

Grüße

von dontlikevs (Gast)


Lesenswert?

wenn du ein array nicht initialisierst, kann es dir passieren das in den 
entsprechenden speicherzellen, die dann dem array zugeordnet sind, eben 
noch daten von vorherigen dingen drinstehen, die werden nicht gelöscht.

arrays müssen zwingend initialisiert werden.
wenn du dein array global oder static deklarierst, musst du das nur 1 
mal machen.

mfg

von DirkB (Gast)


Lesenswert?

Wie gibst du da Array den aus? Alle 15 Zeichen oder nur bis zur '\0'?

von Karl (Gast)


Lesenswert?

Hallo, Danke für die Antworten!
ich gebe die Zeichen bis p.m. aus. Bspw. möchte ich 12:00p.m. ausgeben!
Grüße

von C-Oldie (Gast)


Lesenswert?

Füge doch mal hinter p.m. noch ein \0 ein.

von Kai S. (zigzeg)


Lesenswert?

C-Oldie schrieb:
> Füge doch mal hinter p.m. noch ein \0 ein.

Das macht strcat eigentlich automatisch.

von Kai S. (zigzeg)


Lesenswert?

Karl schrieb:
> Wie ist das zu erklären, bzw. wie rutschen da die Zeichen rein?

Der gepostete code sieht eigentlich OK aus, mit der Annahme dass
cce_time mit 0 terminiert ist, und maximal 14 Zeichen lang.

Der Fehler steckt vermutlich in dem Teil des codes, den Du nicht zeigst 
!

Z.b. sind natuerlich nur 9 Zeichen von "time" gueltig (plus 
abschliessender '\0' terminator). Vielleicht gibst Du einfach zu viele 
Zeichen zurueck ?

von Walter S. (avatar)


Lesenswert?

Kai S. schrieb:
> Das macht strcat eigentlich automatisch.

 aber strncat nicht

von holger (Gast)


Lesenswert?

>> Das macht strcat eigentlich automatisch.

> aber strncat nicht

Doch, tut es.

von Walter S. (avatar)


Lesenswert?

holger schrieb:
>>> Das macht strcat eigentlich automatisch.
>
>> aber strncat nicht
>
> Doch, tut es.

oops, hab ich mit strncpy verwechselt

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.