Archiv verlassen und diese Seite im Standarddesign anzeigen : statt gets() gets_s() verwenden, String einlesen
Wie kann ich mit folgendem Code einen String einlesen?
if (gets_s(szString, BUFFSIZE) == NULL) {
printf("diagnosed undefined behavior.\n");
abort();
}
Wenn ich gets() verwende beschwert sich XCode dass diese Funktion zu unsicher ist. Das Compilieren klappt dann auch nicht. Ich habe den BUFFSIZE auf 500 definiert. Wenn ich gets_s() als Alternative zu gets() wie dargestellt verwende, dann kommt die Meldung: "warning: comparison between pointer and integer" damit kann ich allerdings nichts anfangen?
Was tun?
Greetz
PS.: die Verwendung von gets_s() hab ich hierher:
https://buildsecurityin.us-cert.gov/daisy/bsi/articles/knowledge/coding/300.html
BLUESCREEN3D
16-03-2008, 19:19
Wenn ich gets_s() als Alternative zu gets() wie dargestellt verwende, dann kommt die Meldung: "warning: comparison between pointer and integer"
Die Zeile enthält nur einen Vergleich, nämlich das ==.
Deshalb vermute ich, dass NULL nicht als Zeiger definiert ist, sondern einfach als 0.
Programmierst du in C oder in C++?
Ich programmier in C. Aber so ganz verstehe ich nicht was du meinst.
peschmae
16-03-2008, 21:25
Naja "NULL" ist ja nicht magisch oder so. In irgend einem Header ist ein Makro definiert mit Namen NULL.
Nun ist das in deinem Falle wohl ein
#define NULL 0
also der Integer-Wert 0 anstelle eines Nullpointers à la
#define NULL ( (void*)0)
oder so ähnlich...
MfG Peschmä, der schon immer gegen die Verwendung von NULL war...
ContainerDriver
16-03-2008, 22:09
MfG Peschmä, der schon immer gegen die Verwendung von NULL war...
Was verwendest du dann alternativ, bzw. was wäre dann die Alternative?
peschmae
16-03-2008, 23:54
0 halt. Mein GCC meckert eh nie deswegen. Und ich finds auch leserlicher... ;) (Jawoll!)
Wobei das im aktuellen Falle mit Compiler der deswegen meckert ein sonderlich schlechter Rat ist *g*
MfG Peschmä
Ja...ok, mein Problem ist damit nicht gelöst oder? Hab ich was übersehen?
BLUESCREEN3D
17-03-2008, 12:13
Probier mal in obigem Quellcode folgendes:
... == (char *) NULL
anda_skoa
17-03-2008, 13:02
Oder fgets() benutzen
Das ist immerhin ISO C Standard, während ich zu gets_s keine Manpage gefunden habe
Ciao,
_
locus vivendi
17-03-2008, 19:55
Oder fgets() benutzen
Das ist immerhin ISO C Standard, während ich zu gets_s keine Manpage gefunden habe
Zu gets_s gibt es tatsächlich ein offizielles Dokument. Diese Funktion stammt aus einem Technical Report für C, der für einige Funktionen der C Standardbibliothek sichere Alternativen vorschlägt.
Hier ist ein Entwurf für den TR: http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1172.pdf
Auch dort wird darauf hingewiesen, die Benutzung von fgets zu erwägen.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.