Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

11

30.04.2006, 00:36

Fall 1.:
Nicht Nullterminierte Strings

Fall 2.:
Binärlisten

Fall 3.:
Unicode (Wo steht geschrieben das Unicodestrings mit \0 beendet werden? kommt auf die Zeichensatzformatierung an)

Fall 4.:
Pointerlisten

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

12

30.04.2006, 10:53

Zitat von »"nix da"«

Fall 1.:
Nicht Nullterminierte Strings

Wenn man immer die "Secure" Funktionen benutzt oder einigermaßen aufpasst sind alle Strings nullterminiert. Und wenn man keine nullterminierten Strings benutzt (zB std::string) kommt man wohl nicht auf die Idee, strlen oder strcmp zu benutzen.

Zitat von »"nix da"«

Fall 3.:
Unicode (Wo steht geschrieben das Unicodestrings mit \0 beendet werden? kommt auf die Zeichensatzformatierung an)

Wenn man strlen oder strcmp einen Unicodestring gibt wird der Compiler einen Fehler geben. Wer dann einfach castet ist selbst schuld.

Zitat von »"nix da"«


Fall 2.:
Binärlisten
Fall 4.:
Pointerlisten

Was meinst du damit?

Ciao

Anonymous

unregistriert

13

30.04.2006, 10:57

Helmut
wer in Teufels Namen redet von std::basic_string? Ich rede von Daten, nicht von Containern!

Es gibt ebenfalls Unicodevarianten von strcmp, hier redet keiner von Casten. Du hast vielleicht krankhafte Fantasien. Außerdem kann Dir so ein Problem ebenfalls bei UTF-8 aufkommen.

Pointerlisten: Hast Du noch NIE eine Liste aus N Pointern gemacht? So ne feine M:N-Beziehung?

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

14

30.04.2006, 11:14

Ja willst du die Länge von einem String direkt speichern, ohne eine Klasse zu verwenden, oder wie?
In D mag das ja üblich sein, aber in C++ ist sowas doch krank.
Erklär doch mal genauer, wie du das mit den nicht nullterminierten Strings meinst.

Wegen dem Unicode. Was ist jetzt an strcmp unsicher? Von welchem Problem sprichst du?

Und was haben jetzt Pointerlisten mit den genannteen Funktionen zu tun.

Gib doch einfach mal die Securefunktionen an und wir sind alle zufrieden...

Ciao

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

15

30.04.2006, 11:36

Die Unicode-Variante der Funktionen strlen und strcmp ist wcslen und wcscmp... Wie da die Securevariante ausschaut, weiß ich allerdings nicht... :(
Nicht Nulldeterminierte Strings hören einfach nicht mit L'\0' auf ;)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

30.04.2006, 11:45

C-/C++-Quelltext

1
#define _CRT_SECURE_NO_DEPRECATE


;D

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

17

30.04.2006, 11:53

nix da tötet dich ;)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Anonymous

unregistriert

18

30.04.2006, 16:00

Helmut
strcmp und memcpy sind ANSI C Funktionen und keine ISO C++ Funktionen.

Non-Nullterminierte Strings sind Binärdaten á la:

C-/C++-Quelltext

1
unsigned char array[5] = { 'H', 'a', 'l', 'l', 'o' ];
Und findet man im Binärbereich nur zu Hauf, vorallem beim Binärdatenlesen. Dort gibt es keinen Selector der das Ende spezifiziert. Und was Krank ist und was nicht, ist Definitionssache und diese entscheidet JEDER für sich alleine. Wenn Du nichts mit Binärdaten zu tun hast, oder mit Verschlüsselungstechnologien, bitte - aber andere (z. B. ich) haben damit JEDEN Tag zu tun.

Unicode und wcscmp (NICHT strcmp, die geht sowieso nicht): Es steht nirgendwo beschrieben wie und wo und wofür welches Zeichen für eine Terminierung zuständig ist. Vorallem dies ist noch auf Zeichensatz spezifiziert - Einige Zeichensätze haben z. B. andere Escapesequenzen (wenn es überhaupt eine ist) für eine Nullterminierung.

Bei den Secure Funktionen kann man daher die Länge angeben, damit kein Bufferoverflow stattfindet. Sich auf L'\0' zu verlassen, ist wie die Theorie: "Ich bau nie einen Autounfall" und irgendwann Krachts und Du hast den Salat. Also mal den Teufel nicht sinnlos an die Wand - das ist Dummheit.

Simple Pointerliste:

C-/C++-Quelltext

1
2
3
4
5
unsigned char **array = new unsigned char*[4];
array[0] = &x
array[1] = NULL;
array[2] = &y;
array[3] = &y;
Die werden mit den memory-functions aus C Verglichen wie z. B. memcpy. Was meinste wohl wie memcpy vorgeht? Der sucht nur nach NULL, und? Was meinste was passiert wenn man memcpy, memcmp und co ausführt? Wenn mach Pech hat: Falsche Datenwerte! Der Vorgang wird wegen des NULL abgebrochen.

Und was für Securefunktionen angeben? Die stehen alle auf der MSDN! Ansonsten gebt mir ne Liste und ich sag euch Parameter und co. bzw. wo man sie auf der MSDN findet.

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

19

30.04.2006, 16:50

Danke, sehr aufschlussreich!
Die wichtigsten wären:
memset
memcmp
wcscmp / strcmp
wcslen / strlen
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

20

01.05.2006, 11:31

Also ich bezweilfe mal sehr stark, dass memcpy oder memcmp auf irgendeine 0 reagiert.

Ciao

Werbeanzeige