J
dschensky schrieb:
junix schrieb:
das hat nur zur Folge, dass der String zunächst mal als Länge 0 durchkommt, während im Rest des Strings noch schrott rumwuselt.
Stimmt, ist aber völlig irrelevant.
Definition: Ein C-String ist ein mit Null abgeschlossenes Feld von Zeichen. Jede Funktion für die Manipulation von C-Strings richtet sich nach dieser Definition. Jeder, der die Daten in den dahinter liegenden Zeichen als sinnvolle Informationen zu interpretieren versucht, ist selbst schuld. Eine Terminierungs-Null genügt also völlig.
Stimmt natürlich... Solange man nicht mit Zeigern rumspielt....
dschensky schrieb:
junix schrieb:
dschensky schrieb:
Nachteil kann u.U. sein, daß immer die maximale Zahl an Zeichen in den Ziel-String geschrieben wird (auffüllen mit 0).
Falsch.
Falsch ist Falsch. Hier ein Ausschnutt aus der CBuilder-Hilfe:
CB-Hilfe zu strncpy schrieb:
Copies a given number of bytes from one string into another, truncating or padding as necessary.
Stimmt. Den Padding-Teil hatte ich überlesen. Hab das mal genauer mit dem Debugger angeschaut: Tatsächlich wird erst strlen, dann strcat und dann memset aufgerufen... naja der Zeitverlust hierbei ist nach wie vor minimal.
dschensky schrieb:
junix schrieb:
dschensky schrieb:
Wenn ich also z.B. um die Konsistenz der übergebenen Daten besorgt bin, muß ich die Länge des übergebenen Strings sowieso überprüfen und kann dann auch strcpy benutzen.
Falsch.
Hey, sag das doch nicht dauernd!
Nur wenns passt.
dschensky schrieb:
Wenn ein Nutzer ein neues Passwort eingibt und das Programm dieses einfach mal so kürzt und dann übernimmt und der Nutzer sich dann das nächste mal nicht anmelden kann, ist das für den Nutzer alles andere als frei von Widersprüchen.
tritt dieser Fall ein, hast du offensichtlich was falsch gemacht.
dschensky schrieb:
Nimmt das Programm aber eine Prüfung der Länge des Strings vor, kann es auf die Fehleingabe reagieren,
Hat dir dasjemand verboten?
dschensky schrieb:
wenn das Passwort zu lang ist oder aber einfach strcpy benutzten, wenn es kurz genug ist.
Falls dus noch nicht gemerkt hast: Es geht meistens nciht darum, dass eine Benutzereingabe beim Eintritt in das Programm fehler auslösen kann, sondern dass der Programmierer Fehler gemacht hat bei der Verarbeitung des Strings. Dabei hilft alerdings strncpy das zu vermeiden.
-junix