Stringfunktionen in "C" - Hilfe bei Beispielen
charmin 14.11.2015 - 20:48 3954 22
Blaues U-boot
blupp, blupp
|
str[i+j] kann je nach i und j außerhalb des speicherbereichs von str zugreifen und dann wird entweder irgentein wert der gerade zufällig an der adresse ist ausgelesen oder das OS wirft nen fehler wegen einer speicherzugriffsverletzung (segmentation fault).
|
charmin
Elder^_^
|
ok checko. danke
|
11Fire01
Here to stay
|
auf den modernen editoren sieht man so manchen segmentation fault gar nicht. dafür wenn man es auf einem pi laufen hat ... und dann alle
|
that
Hoffnungsloser Optimist
|
auf den modernen editoren sieht man so manchen segmentation fault gar nicht. dafür wenn man es auf einem pi laufen hat ... und dann alle Wenn der Editor segfaulted, dann ist aber der Editor hin und nicht dein Programm.
|
that
Hoffnungsloser Optimist
|
Falls es jemanden interessiert. nun gehts. Ich bin leider etwas spät dran, aber das funktioniert ja überhaupt nicht. Erstens mag der Compiler deine leere Konstante nicht: that@ws ~/incoming $ gcc test.c
test.c: In function ‘strsearch’:
test.c:15:33: error: empty character constant
if (str[i+j] == '') //fehlerfall: str zu kurz
^
Zweitens funktioniert schon mein einfachster Testfall nicht: assert(strsearch("", 3, "a") == -1);
Was genau sollte maxsearch bewirken? Dass nur min(strlen(str), maxsearch) Zeichen durchsucht werden? Drittens funktioniert mein zweiteinfachster Testfall auch nicht: assert(strsearch("abc", 3, "a") == 0);
Steht in der Angabe irgendwo, dass der Suchstring mit "\n" aufhören muss? Es ist generell hilfreich, zum Testen solcher Funktionen erstmal ein eigenes main() zu schreiben, das einfach nur ein paar konstante Werte an die Funktion übergibt und das Ergebnis mit dem erwarteten Ergebnis vergleicht (z.B. mit dem assert-Makro wie oben). Erstmal schreibt man ein paar Tests für alle Randfälle, die einem so einfallen (leere Strings, gleich lange Strings, Fundstelle am Anfang, in der Mitte, am Ende, nur letztes Zeichen verschieden, Suchstring länger als durchsuchter String, ...), und dann baut man die Funktion so lange um, bis alle Tests korrekt durchlaufen.
|
11Fire01
Here to stay
|
nein, ich meinte, ich hatte einmal ein programm geschrieben. relativ groß in eclipse und es lief im grunde einwandfrei, zumindest im editor. ich habe dann den source code für arm-cpu compiliert und dort zahlreiche segmentation faults gehabt. die ich so unter windows nie hatte. welche mit fgets zu tun hatten.
|
mat
AdministratorLegends never die
|
Selbst die libc kann je nach Plattform/Compiler sehr unterschiedlich sein, weil das getrennte Implementierungen sind. Außerdem hat ja auch die Hardware bei der Ausführung noch einiges mitzureden. Der Editor/die IDE hilft ja nur bei der Syntax der Programmiersprache und bringt etwaiges Typehinting für Libraries. that, Unit-Testing mit Assertions? Interessante Vorgehensweise.
|
that
Hoffnungsloser Optimist
|
that, Unit-Testing mit Assertions? Interessante Vorgehensweise. Ein echtes Unittest-Framework ist natürlich bequemer, aber für ganz einfache Tests reicht assert auch, und man muss es nicht erst installieren.
|