
Moin, * Jan Trippler <Jan.Trippler@t-online.de> [02-08-03 20:37]:
On Sam, 03 Aug 2002 at 20:09 (+0200), Thorsten Haude wrote:
* Jan Trippler <Jan.Trippler@t-online.de> [02-08-03 16:53]:
On Sam, 03 Aug 2002 at 00:18 (+0200), Thorsten Haude wrote:
Ein String wird in C _immer_ nullterminiert! Es gibt keine Ausnahmen, ein String ist bei 0 zu Ende. Zeige mir _ein_ Beispiel, in dem das nicht so ist. char versuch[6] = {'k', 'a', 'p', 'u', 't', 't'};
Ein nicht terminierter String, der in jedem Programm Stress machen wird. Das was Du da fabriziert hast, ist einfach nur ein char-Array. Ein String (der als Datentyp in C übrigens nicht existiert) ist ein Null-terminiertes char-Array.
Ja was denn nun? Ein nicht terinierter String, der nicht existiert?
Siehe unten. Du drehst mir das Wort im Mund rum.
Die Gelegenheit war günstig.
versuch[6] ist ein char-Array. Natürlich kannst Du solche char-Arrays - wenn Du es möchtest - ohne 0-Terminierung anlegen (wenn es z. B. für Flags genutzt wird, ist das auch nicht nötig), aber wenn Du _irgendeine_ Stringfunktion drauf loslassen willst, dann _muss_ am Ende eine 0 stehen.
Die ist aber schon bewußt, daß diese Dinge auch durch Fehler anderswo bzw. durch Angriffe passieren können, oder? Darum sollte C-Code idR. so robust wie möglich sein, nicht so schnell wie möglich.
Es geht doch nur darum, daß diese ganze C-Eigenheit mit dem Zeiger-auf-Chararacter offensichtlich und bekannterweise nicht wasserdicht ist. Darum sollte man bei ihrer Benutzung keine Haare spalten, sondern auf Nummer sicher gehen.
Die Haarespalterei machst Du hier. Du behauptest seit Tagen, strcmp liest über die 0 hinweg und das ist Stuss.
Ich behaupte nur, daß ich nicht sicher wissen kann, daß es anders ist.
Du behauptest seit Tagen, dass die Benutzung von strcmp eine Sicherheitslücke ist und das ist Stuss
Ich behaupte, daß das Leben zu kurz und strncmp() zu billig ist, um darüber nachdenken zu müssen.
Ich entwickele seit einer Reihe von Jahren Programme u. a. in C für diverse Unix-Derivate (Reliant Unix, HP-UX, AIX, Solaris und vereinzelt SCO waren schon dabei), in keinem einzigen Fall hat der strcmp anders als in der glibc funktionert (intern vielleicht, aber er hat _immer_ bei 0 aufgehört).
Das ist gut, dann kennst Du vielleicht auch einen Beweis, der nicht nur anekdotisch ist. Daß es strcmp()s gibt, die sich so vernünftig verhalten, wie erwartet, haben wir ja schon geklärt.
[...]
P.S.: Du stellst einen Sachverhalt in Frage, der die Grundlage für das gesamte Stringhandling in C bildet.
Bitte? Welcher wäre das wohl?
s. o.
"Strings existierern nicht"? Das würde allerdings das gesamte Stringhandling beeinflussen.
Wieder einmal: Wenn Du zitierst, dann bitte korrekt. So langsam werde ich sauer. O-Ton Jan: ... Ein String (der als Datentyp in C übrigens nicht existiert) ... Ich habe also mitnichten behauptet, dass Strings nicht existieren, sondern dass sie _als Datentyp_ nicht existieren.
Tut mir leid, ich hätte es nicht als wörtliches Zitat markieren sollen, aber wenn es keinen Typ String gibt, gibt es auch keine Strings: Gerade darum muß man ja durch so viele Reifen springen, wenn man in C Strings verarbeitet.
Das "s. o." bezog sich auf die Nullterminierung, was jedem halbwegs aufmerksamen Leser wohl auch sofort aufgefallen wäre.
Du solltest nicht davon ausgehen, daß ich Gedanken lesen kann. Thorsten -- Auch Hunger ist Krieg. - Willy Brandt