Galileo-Beispielprogramm stürzt ab - scanf_s() statt scanf()



  • Ich versuche mich grade an dem Openbook von Galileo mittels Visual Studio 2013 und die ersten Sachen laufen auch problemlos, nur dieses hier stürzt ab bei:
    Char + Int
    Int + Int

    Dagegen laufen:
    Int + Char
    Char + Char

    Fehlerliste in VS 2013 ist leer, aber im linken Fenster "Auto" sind 2 Werte rot dargestellt:

    + &a 0x00e8f8b7 "aÌÌÌÌÒÐ!q\x10ùè" char *
    + &b 0x00e8f8a8 {-858993460} int *

    /* scanf6.c */
    #include <stdio.h>
    
    int main(void) {
    	char a;
    	int b, check;
    
    	printf("Bitte Eingabe machen (Zeichen/Zahl): ");
    	check = scanf_s("%c %d", &a, &b);
    	printf("check = %d \n", check);
    	return 0;
    }
    

    http://openbook.galileo-press.de/c_von_a_bis_z/004_c_ein_ausgabe_001.htm#mj084949d953d4845602b7382212674444

    Der Compiler von VS beschwert sich über scanf() und schlägt mir scanf_s() vor, was ich dann auch getan habe, keine Ahnung ob es mit scanf() läuft, in den Compilereinstellungen irgendwelche Ausnahmen reinzufrimmeln ist mir momentan zu hoch und ja auch nicht Sinn der Sache :).



  • Es gibt Unterschiede zwischen scanf_s und scanf:

    <a href= schrieb:

    MSDN - scanf_s">In the case of characters, a single character may be read as follows:
    char c;
    scanf_s("%c", &c, 1);
    When multiple characters for non-null terminated strings are read, integers are used as the width specification and the buffer size.
    char c[4];
    scanf_s("%4c", &c, _countof(c)); // not null terminated

    D.h. du musst für character und strings angeben wieviele Zeichen du maximal lesen kannst. Nimm also

    check = scanf_s("%c %d", &a, 1, &b);
    

  • Mod

    frorg schrieb:

    Openbook von Galileo

    Ein bekannt schlechtes Buch voller Fehler. Unbedingt meiden!



  • frorg schrieb:

    Der Compiler von VS beschwert sich über scanf() und schlägt mir scanf_s() vor, was ich dann auch getan habe,

    ES ist nur ein Vorschlag

    frorg schrieb:

    keine Ahnung ob es mit scanf() läuft,

    Tut es.

    frorg schrieb:

    in den Compilereinstellungen irgendwelche Ausnahmen reinzufrimmeln ist mir momentan zu hoch

    aber lehrreich und auch nicht nötig. Wenn du nach der Meldung suchst, wirst du da auch eine #pragma Anweisung finden, die du an den Anfang vom Quelltext kopierst.

    frorg schrieb:

    und ja auch nicht Sinn der Sache :).

    Es ist vor allem nicht Sinn der Sache, einfach so mal compilerspezifische Erweiterungen zu nutzen, ohne zu wissen wie sie funktionieren.
    Denn die neue Sicherheit muss ja irgendwo herkommen. Daher ist die Funktion auch anders zu benutzen.

    frorg schrieb:

    Openbook von Galileo

    Die Onlineausgabe?
    Da wirst du noch viel mehr Fehler lehrnen, ohne dass du es merkst. 😞



  • Das Programm von Herrn Wolf war in Ordnung, wenn auch nicht sicher, aber in einem Lehrbuch kann man nicht bei jedem Minimalbeispiel auf Sicherheit achten, das macht keinen Sinn.

    Willst du sichere Eingaben haben, dann nutze nicht den Tipp von VisualStudio, das ist nämlich keine gute IDE um C oder auch C++ zu lernen, da sie immer wieder vom Standard abweicht, oder erst gar nicht alles unterstützt. Nutze anstelle von scanf oder gets einfach fgets mit stdin, da kannst du dir dann eine schöne kleine Funktion bauen, die dir eine sichere Eingabe in C bietet. Wenn du C11 machen willst, dann kannst du auch gets_s nehmen, das ist dann wenigstens standardkomform und Finger Weg von VisualStudio wenn du Standard-C lernen willst.



  • Wolferine schrieb:

    ... ,wenn auch nicht sicher,

    Wo ist das Beispiel (mit dem scanf) denn unsicher?
    Und wie könnte man es ausnutzen?



  • Wolferine schrieb:

    Unsinn

    @GlobalModerator: kann man Beiträge wegen nachweislicher Blödheit löschen lassen?



  • SeppJ schrieb:

    frorg schrieb:

    Openbook von Galileo

    Ein bekannt schlechtes Buch voller Fehler. Unbedingt meiden!

    Ja genau das, die Onlineausgabe.
    Mhh doof, natürlich will ich standardkonformes C lernen, aber ich brauche ein Buch / Lernmaterial, was mich nicht zu brutal mit der Pointerarithmethik zuhämmert am Anfang.
    Und am besten auf Deutsch, Englisch kann ich auch gut genug aber zum entspannten lesen bevorzuge ich deutschsprachige Quellen.

    Ich könnte mir aus der Unibibliothek einiges ausleihen, aber ich kann schlechte von guten Sachen ja nicht unterscheiden 😕.



  • frorg schrieb:

    Ich könnte mir aus der Unibibliothek einiges ausleihen, aber ich kann schlechte von guten Sachen ja nicht unterscheiden 😕.

    Weil du sie noch nicht unterscheiden kannst, sagen wir dir doch, dass die Online Ausgabe von Jürgen Wolf einfach nur Mist (es gibt ein Haufen Posts hier, mit denen wir längst belegt haben, wie schlecht das Buch ist).

    Hier im Forum haben wir ein Post https://www.c-plusplus.net/forum/300567 von SeppJ mit sehr nützlichen Links für die C-Sprache.



  • supertux schrieb:

    Hier im Forum haben wir ein Post https://www.c-plusplus.net/forum/300567 von SeppJ mit sehr nützlichen Links für die C-Sprache.

    Da sind leider nur englische Bücher drin, gibt es keine guten deutschsprachigen Sachen in Buchform? 😞

    Java von Kopf bis Fuß war ein super Lehrbuch für meinen Kurs, C von Kopf bis Fuß soll aber ziemlich schlecht sein, das war eigentlich mein Favorit bis ich die Kritiken gelesen hab.



  • Ich fand "Programmieren in C" von Kernighan und Ritchie sowie OReillys "C in a Nutshell" nicht schlecht, ansonsten Foren und Reference nutzen. C ist nicht so kompliziert, wenn man einmal das mit den Zeigern verstanden hat und keine Angst vor generischer Programmierung mit void* hat. Es ist wirklich einfach wenn man sich den Speicher vorstellt oder auch mal aufmalt und Fehler sind in der Regel auch sehr schnell gefunden.



  • frorg schrieb:

    Da sind leider nur englische Bücher drin, gibt es keine guten deutschsprachigen Sachen in Buchform? 😞

    Ich persönlich finde die Haltung "bitte bitte auf deutsch *cry*" bei Programmierern bzw. möchte-Programmierern-werden unmöglich. Die IT Welt ist nun mal von Englisch dominiert und es nicht verkehrt sich dran zu gewöhnen und sich für einzustellen. Außerdem gibt es auf Englisch deutlich mehr (und öfters viel bessere) Dokumentationen, auch mehr Hilfe (wenn man auf Seiten wie stackoverlow geht).



  • supertux schrieb:

    Ich persönlich finde die Haltung "bitte bitte auf deutsch *cry*" bei Programmierern bzw. möchte-Programmierern-werden unmöglich.

    Ich weiss, aber da die Programmierung nur ein Hobby von mir ist (bis auf einen Javakurs an der Uni, aber der war so anspruchslos ...) bin ich da halt faul und nehme, wenn ich die Wahl habe, gerne die deutsche Variante 🤡.

    Für Blogs/Entwicklerforen hab ich mit Englisch auch kein Problem, aber ein gutes Einsteigerbuch lese ich nunmal gerne auf Deutsch, die Javadocs für Lib-Funktionen hab ich dann auch auf Englisch gelesen, aber es geht für mich halt flüssiger auf Deutsch.

    @CTipp: Das Problem daran ist, dass es Unmengen an schlechtem C-Code gibt, vor allem in Foren, da kann ich gleich bei Jürgen Wolf bleiben.
    Ausserdem ist das dann alles nicht didaktisch aufbereitet und damit für mich wertlos.



  • Für einen Einstieg ist C muss es kein Buch auf English sein.

    [Flames gelöscht durch SeppJ]

    Ich bin auch nur hier weil es auf Deutsch ist, fachlich wirst du schnell gelöscht wenn du C++ nicht in den Himmel lobst, sondern dessen ganzen Nachteil gegenüber C oder Java erwähnst.


  • Mod

    CTipp schrieb:

    Für einen Einstieg ist C muss es kein Buch auf English sein.

    Die Sprache ist nicht wichtig, der Inhalt. Jürgen Wolf wäre auch auf Englisch schlimm. Wenn man mit dem Wolf lernt, dann lernt man bloß, wie man es falsch macht und dabei die Fehler auch noch so vertuscht, dass das Buchbeispiel und die einfachen Aufgaben im Buch vielleicht mit viel Glück sogar funktionieren, aber wenn man dann richtige Programme schreiben will, weiß man eben nicht, wie es geht. Zur Not gibt's ja auch oft Übersetzungen der englischen Anfängerbücher (so auch für K&R, auch wenn sie nicht übermäßig gut sein soll), erst bei Büchern für Fortgeschrittene werden Übersetzungen selten - vermutlich weil der Markt zu klein ist.

    Ich bin auch nur hier weil es auf Deutsch ist, fachlich wirst du schnell gelöscht wenn du C++ nicht in den Himmel lobst, sondern dessen ganzen Nachteil gegenüber C oder Java erwähnst.

    Quatsch. Es wird gelöscht, wenn jemand inhaltlichen Unfug schreibt (egal zu welchem Thema oder welcher Position) oder beleidigend wird*. So wie du.

    *: Und natürlich auch andere Arten von Trollerei und selbstverständlich Spam, von dem du wahrscheinlich gar nichts mit bekommst.



  • Was bei dir schon alles eine Beleidigung ist. Ich hoffe dass du nie so richtig zusammen gefaltet wirst.

    "C in a Nutshell" fand ich auch vom Deutschen ganz gut und den K&R auf jeden Fall in Ordnung, ist ja kein Roman sondern ein Fachbuch. Mir gehen die ganz pikierten Fachidioten es auf den Geist, die von sooo schlechten Übersetzungen reden. Mir ist noch kein Fachbuch in Deutsch untergekommen was nun wirklich soooo schlecht übersetzt wurde, dass ich nichts verstanden habe.

    Und nein, man braucht nicht ein Wort English wenn man programmieren will, das ist absoluter Unsinn. Es ist halt nur leichter, weil man auf mehr Informationen zugriff hat, aber ein MUSS ist es nie.


  • Mod

    CTipp schrieb:

    Und nein, man braucht nicht ein Wort English wenn man programmieren will, das ist absoluter Unsinn. Es ist halt nur leichter, weil man auf mehr Informationen zugriff hat, aber ein MUSS ist es nie.

    Du kannst auch in England leben, ohne ein Wort Englisch zu reden. Es ist halt nur leichter, weil man auf mehr Informationen zugriff hat, aber ein MUSS ist es nie.



  • Den Klassiker gibt es auch in deutscher Übersetzung, wenn auch kein klassisches Lehrbuch:

    K&R2 deutsch



  • Wutz schrieb:

    Den Klassiker gibt es auch in deutscher Übersetzung, wenn auch kein klassisches Lehrbuch:

    Die deutsche Übersetzung des Klassikers ist allerdings unterirdisch.



  • Quatsch. Ich habe das Buch gelesen (engl.+deutsch), und dem ist nicht so.
    Die Übersetzungsmängel sind verkraftbar.


Anmelden zum Antworten