Hallo, ich habe ein Problem mit strstr, ich lese 512 Byte in einen Puffer ein und möchte feststellen, ob der String FAT16 darin enthalten ist, aber ich komme immer nur in den else Zweig, egal ob der gesuchte string im Puffer ist oder nicht. unsigned char buffer[BLOCKSIZE]; /* read Master Boot Record from SD Card at address 0x00 */ sd_SPI_read_block(MBR, buffer); //buffer[511] = "\0"; //lcd_putc(buffer[54]); /* if no MBR found, firs_vbr_addr = 0 */ if(strstr(buffer, "FAT16") != NULL) // != NULL wenn String gefunden = kein MBR vorhanden! { first_vbr_addr = 0; lcd_puts("No MBR found!\n"); } else { /* calculate address of the volume boot record */ first_vbr_addr = buffer[VBR] + (buffer[VBR+1] << 8); lcd_puts("MBR found!\n"); }
Hi, könnte sein, da stehen alle möglich Daten drin! Würde dir Funktion dann abbrechen?
Ja. Im Gegensatz zu strstr sucht Funktion memmem in Speicherblöcken, deren Ende durch eine Größenangabe definiert ist:
1 | #include <string.h> |
2 | void *memmem(const void *haystack, size_t haystacklen, |
3 | const void *needle, size_t needlelen); |
memmem ist nicht im C-Standard enthalten, aber sowohl in der Glibc als auch in der AVR-Libc. Notfalls kannst du diese Funktion auch schnell selbst schreiben.
Bernd Edlinger wrote: > Hallo, > mein WinAVR kennt leider keine memmem() Funktion! > > Wie könnte ich die selbst machen? So schwer ist das auch wieder nicht (wenn die Suchgeschwindigkeit erst mal nicht 'so schnell wie möglich' sein soll. Wie suchst du denn in einem Text nach einem bestimmten Wort? Dein Suchwort sei zb. 4 Zeichen lang. Du fängst im Text ganz vorne an. Dann vergleichst du die nächsten 4 Zeichen mit deinem Suchwort und wenn alle 4 gleich sind hast du das Wort gefunden. Wenn sie nicht gleich sind, dann betrachtest du den Text vom nächsten Zeichen weg. Wieder: sind ab dieser Position die nächsten 4 Zeichen mit dem Suchwort ident, dann hast du das Wort an dieser Stelle gefunden. Wenn nicht: Im Text die nächsten 4 Zeichen ab der Position 2 im Text vergleichen, wenn sies nicht sind, dann ab Position 3 etc. etc. bis du ganz am Ende des Textes - 4 Zeichen angelangt bist und das Suchwort da nicht mehr enthalten sein kann. Dann steht fest, dass das Suchwort da sicher nicht enthalten ist. Wie gesagt: Ist nicht unbedingt das schnellste, aber dafür sehr simpel. Überleg dir einfach, wie du im realen Leben solche Probemstellungen löst und entwickle daraus (indem du dich selbst beobachtest) einen Algorithmus. Solch ein Vorgehen ist sehr lehrreich!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.