Hallo,
ich möchte gern in ein Register schreiben, dass max 5 Zeichen lang ist.
Wenn das Register voll ist, soll vorne wieder angefangen werden.
Also ein array benutzen der Länge 4 und wie stellt man das in C dar?
Gruß
Nicole
Hallo,
ich möchte gern in ein Register schreiben, dass max 5 Zeichen lang ist.
Wenn das Register voll ist, soll vorne wieder angefangen werden.
Also ein array benutzen der Länge 4 und wie stellt man das in C dar?
Gruß
Nicole
Hallo Nicole,
ich möchte gern in ein Register schreiben, dass max 5 Zeichen
lang ist.
Wenn das Register voll ist, soll vorne wieder angefangen
werden.Also ein array benutzen der Länge 4 und wie stellt man das in
C dar?
Du meinst wohl ein Array mit Länge 5, oder?
Hier ein Beispiel-Code:
char reg[5], c;
int nCounter = 0;
...
while( ... )
{
...
reg[nCounter++ % 5] = c;
...
}
Event. prüfst Du nCounter auf einen Überlauf.
HTH,
Pürsti
Hi,
danke.
Wie prüfe ich auf einen Überlauf?
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Pürsti,
char reg[5], c;
int nCounter = 0;…
while( … )
{
…
reg[nCounter++ % 5] = c;
…
}
Das würde ich SO nicht tun !!
Grund:
Nach 215 Durchgängen wird nCounter negativ !!
Also besser:
...
reg(nCounter++] = c;
nCounter %= 5;
...
MfG Peter(TOO)
Hallo Peter,
char reg[5], c;
int nCounter = 0;…
while( … )
{
…
reg[nCounter++ % 5] = c;
…
}Das würde ich SO nicht tun !!
Grund:
Nach 215 Durchgängen wird nCounter negativ !!
Bei 16-Bit-Systemen nach 215-1, bei 32-Bit nach 213-1 und bei 64-Bit-Rechner nach 263-1 Durchläufen. Deshalb schrieb ich ja:
Event. prüfst Du nCounter auf einen Überlauf.
Falls die Schleife max. 100 Durchläufe macht, wäre eine Überprüfung nur bei 7-Bit- (oder weniger) Rechnern notwendig.
Also besser:
…
reg(nCounter++] = c;
nCounter %= 5;
…
Falls die Anzahl der max. Durchläufe nicht bekannt oder zu gross ist, wäre dies die Lösung, da gebe ich Dir recht.
Einen schönen Rest des Arbeitstages,
Pürsti
Hallo Nicole,
Wie prüfe ich auf einen Überlauf?
So wie von Peter oben vorgeschlagen.
Mfg,
Pürsti
Hallo Pürsti,
Grund:
Nach 215 Durchgängen wird nCounter negativ !!Bei 16-Bit-Systemen nach 215-1, bei 32-Bit nach
213-1 und bei 64-Bit-Rechner nach 263-1
Durchläufen.
Ich sehe du hast mich verstanden, ich war nur zu faul dass alles so hinzuschreiben !!
Deshalb schrieb ich ja:
Event. prüfst Du nCounter auf einen Überlauf.
Falls die Schleife max. 100 Durchläufe macht, wäre eine
Überprüfung nur bei 7-Bit- (oder weniger) Rechnern notwendig.
Du weisst ja wie das in der Praxis funktioniert:
Die Anzahl Durchgänge ist möglichst noch von der grösse einer Datei abhängig. Also bei 100 Kunden funktioniert das Problemlos, aber der eine hat eine grosse Datei und das Programm stürzt deshalb immer ab !!!
Der Aufwand beim programmieren, um die Möglichkeit für einen Überlauf zu unterbinden, ist klein, gegenüber der Fehlersuche später, besonders wenn dann ein anderer den Fehler suchen muss.
Also wenn wir schon Tips an Anfänger geben, sollten wir solche Dinge auch gleich berücksichtigen! Andernfalls gibt es noch mehr Programme auf der Welt mit Bufferoverrun.
MfG Peter(TOO)
Hallo,
Also wenn wir schon Tips an Anfänger geben, sollten wir solche
Dinge auch gleich berücksichtigen! Andernfalls gibt es noch
mehr Programme auf der Welt mit Bufferoverrun.
Naja, zum Bufferoverflow führt das in diesem Fall dann aber auch wieder nicht. Der Index bleibt schön im vorgesehenen Bereich.
Gruß Ben