Infinite Loop STM32 Zeichen ersetzen

Gast #5836613
Lesenswert?

Hallo,

ich bekomme bei folgendem Code ein infinite Loop. Ich versuche lediglich 
in einem String alle Zeichen a durch Zeichen b zu ersetzen. Nach einer 
Hand voll Schleifendurchläufen bekomme ich den Fehler. Warum ist das so?
1
static void strrpl(char *pStr, char replace, char newChar){
2
  do {
3
    if(*pStr == replace) *pStr = newChar;
4
    pStr++;
5
  } while(*pStr != '\0');
6
}
Gast #5836640
Lesenswert?

Ja, aber wie gesagt: Bereits nach fünf vergleichen geht der in infinite 
loop. Der String ist aber 0-terminiert und deutlich länger als fünf 
Zeichen.

Unter welchen Bedingungen tritt dieser Fehler eigentlich ein?
Gast #5836646
Lesenswert?

leo schrieb:
> Peter schrieb:
>> ich bekomme bei folgendem Code ein infinite Loop.
>
> Zwei Moeglichkeiten:
>
> a) Worauf pStr zeigt, ist kein C-String, i.e. nicht durch NUL terminiert
> b) Du kaputtest diesen String irgendwo spaeter

c) "replace" ist NUL, i.e. du vernichtest dein Stringende.

>
> HTH
> leo
Gast #5836693
Lesenswert?

Peter schrieb:
> Jim M. schrieb:
>> Steht der String zufällig im Flash statt im RAM (weil Konstante)?
>
> Danke, das war es!

"Nach einer
Hand voll Schleifendurchläufen bekomme ich den Fehler."

Das passt aber nicht ganz zusammen. Oder (Hand-1) Durchlaeufe waren 
NOPs.

leo
Gast #5836729
Lesenswert?

Peter schrieb:
> static void strrpl(char *pStr, char replace, char newChar){
>   do {
>     if(*pStr == replace) *pStr = newChar;
>     pStr++;
>   } while(*pStr != '\0');
> }


ich würde diese do-while-Schleife durch eine while-Schleife ersetzen.

Bei dir wird immer die Adresse um eine Stelle verschoben. Erst dann wird 
geprüft.

Wenn es passiert dass die Funktion einen leeren String bekommt, dann 
wird solange geprüft bis im Speicher eine Null gefunden wird. Zumindest 
auf einem PC.
Gast #5836731
Lesenswert?

Peter schrieb:
> leo schrieb:
>> Das passt aber nicht ganz zusammen. Oder (Hand-1) Durchlaeufe waren
>> NOPs.
>
> Doch, denn das fünfte Zeichen war ein '\r' :). Das wurde versucht zu
> ersetzen und Fehler!

Ah. Die wichtigste Info im letzten Posting, nach Nachfragen. Super.

leo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren