Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » fscanf_s -> unbehandelte Ausnahme

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.05.2008, 17:41 Uhr
banshee



hallöchen,


C++:
char szWord[20];
    
    fopen_s(&f, szFilename, "r");

    while(1)
    {
        do
        {
            fgets(szLine, 255, f);
        } while(strncmp("bla", szLine, 3) && !feof(f));

        // Abbruch bei EOF
        if(feof(f))
        {
            fclose(f);
            return;
        }

        do
        {
            fscanf_s(f, "%s", szWord);
        } while(strcmp("blup", szWord) && strncmp("***", szWord, 3));

...


Dieser Code erzeugt beim ersten Aufruf von fscanf_s eine unbehandelte Ausnahme mit einer kryptischen Fehlermeldung. Hat jemand eine Idee woran das liegt? Mit der normalen Variante funktioniert es jedenfalls.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.05.2008, 17:58 Uhr
0xdeadbeef
Gott
(Operator)


Die _s-Funktionen sind nicht im Standard enthaltene Erweiterungen der Microsoft-CRT und funktionieren ein bisschen anders. In diesem Fall verlangt fscanf_s für %s die Länge des Buffers, also

C++:
fscanf_s(f, "%s", szWord, 20);


Das ist dann äquivalent zu

C++:
fscanf(f, "%19s", szWord);


...was hier die sinnvollere Methode wäre. Man muss sich ja nicht mit aller Macht von Portabilität entfernen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.05.2008, 19:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


allerdings, diese *_s funktionen von MS sind teilweise völlig unintuitiv und großteils schwachsinnig, mal von portabilitätsgründen ganz abgesehen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.05.2008, 20:21 Uhr
0xdeadbeef
Gott
(Operator)


Ich hab so ein bisschen die Vermutung, dass die Portabilitätsgründe der eigentliche Grund dafür sind, dass es diese Funktionen gibt (und sie in Compilerwarnungen empfohlen werden). MS hat nie wirklich ein großes Interesse an Interoperabilität gezeigt - es würde mich nicht wundern, wenn der Microsoft-Compiler den Programmierern, die mit ihm Programmieren lernen, windows-spezifische Eigenheiten angewöhnen wollte.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.05.2008, 21:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wahrscheinlich
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: