Forum: Compiler & IDEs strncmp_P <-> memcpy


von Richard Brose (Gast)


Lesenswert?

Hallo zusammen,

was ist der unterschied zwischen dem Aufruf

   if (strncmp_P(File_Name,PSTR("cam.jpg"),7) == 0)

und

   if ( memcmp(File_Name, "cam.jpg",7) == 0)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

1. dass "cam.jpg" im ersten Fall ROM braucht, im zweiten Fall ROM und
RAM (ich nehme an, das ist AVR-GCC/avr-libc hier).

2. dass im ersten Fall der Vergleich abgebrochen wird, wenn File_Name
ein '\0' irgendwo bereits vor dem 7. Zeichen hat, während im zweiten
Fall weiter irgendwo im Speicher gelesen werden könnte.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

memcmp vergleicht die angegebene Anzahl Bytes im Speicher, strncmp 
vergleicht maximal die angegebene Anzahl Zeichen zweier Strings 
miteinander und bricht bei Stringende auch vorher ab.

Obendrein greift strncmp_P als Spezial-Konstrukt des avr-gcc auf Daten 
im Programmspeicher (dem Flash) zu - was aufgrund der 
Harvard-Architektur des AVR anders codiert werden muss als bei 
von-Neumann-Prozessoren.

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.