Seite 2 von 2 ErsteErste 12
Ergebnis 16 bis 22 von 22

Thema: Warum geht das nicht :(

  1. #16
    Registered User
    Registriert seit
    Sep 2008
    Beiträge
    402
    Renommee
    270

    Re: Warum geht das nicht :(

    Für

    Code:
    int main(int argc, char* argv[], char* envp[])
    kannst Du auch einfach

    Code:
    int main()
    schreiben, da die Variablen hier eh nicht gebraucht werden.

    Die größte Zahl in dem Array zu finden, ist sehr "ungenerisch" umgesetzt. Um den Weg über die Kleinst-Mögliche-Int32-Zahl zu umgehen, kannst Du einfach annehmen, dass die erste Zahl in dem Array die Kleinste ist. Dann gehst Du restlichen Elemente durch und guckst, ob es noch kleinere Werte gibt.

    Code:
    int maxval(int numbers[])
    {
        int largest;
        int idx;
        int i;
    
        // Ein Array-Index kleiner gleich Null ist nicht sinnvoll.
        // Deswegen kann man das gut als Fehlerwert zurückgeben.
        // Wäre sinnvoller, wenn man es dem User überlässt, wieviele
        // Werte er eingeben möchte.
        if (NUMS <= 0)
            return -1;
    
        // Annehmen, das die erste Zahl die Größte ist
        largest = numbers[0];
        idx = 0;
    
        // Jetzt überprüfen, ob von den restlichen Zahlen
        // noch eine Größere dabei ist (also bei i=1 anfangen)
        for (i=1; i<NUMS; i++)
        {
            if (numbers[i] > largest)
            {
                largest = numbers[i];
                idx = i;
            }
        }
    
        return idx;
    }

    Du schlägst solange in Büchern(eher google...) nach, bis Du das Wichtigste auswendig weißt. Seltenere Sachen schlägt man immer wieder nach. Wenn Du mit irgendwelchen API's arbeiten musst, kommst du wahrscheinlich am Schnellsten mit /samples/ oder /examples/ zur Gange.

    Einen Einstieg zur C-Security findest du hier: http://openbook.galileocomputing.de/...ffaa3a1b24ec31

  2. #17
    Member
    Registriert seit
    May 2004
    Beiträge
    1.432
    Renommee
    1142

    Re: Warum geht das nicht :(

    Zitat Zitat von gruena Beitrag anzeigen
    Code:
    int main()
    Code:
    int main(void)

  3. #18
    Moderator
    Registriert seit
    May 2000
    Beiträge
    1.368
    Renommee
    1285

    Re: Warum geht das nicht :(

    Zitat Zitat von Galactus Beitrag anzeigen
    Was bedeutet
    Code:
    largest = 0x80000000
    Also wie du die größere Zahl ermittelst.
    Das ist -1, hexadezimal geschrieben.

    Wenn ich fragen darf, schlagt eigentlich in Büchern nach, oder kennt ihr die benötigten Funktionen auswendig? Also wenn ihr jetzt ein Programm schreibt?
    Die wichtigsten kenne ich auswendig. Bei Unix-Systemen ist die Dokumentation der C-Funktionen normalerweise in Form von manual pages installiert, da schaue ich nach, wenn ich die Syntax, Rueckgabewerte, Fehlercodes etc. einer Funktion wissen will ("man <funktionsname>").

    Wenn ich schon dabei bin.. , was muss ich noch wissen oder ansteuern in der Programmiersprache C um nach den Grundlagen besser zu werden. Ich meine was gibt es so für Themenbereiche auf die man sich spezialisieren könnte,welche aber mit Security zu tun haben?
    File-I/O, Stringmanipulation (Texte vergleichen, Textstellen extrahieren, etc.), Datenstrukturen und Algorithmen, Betriebssystem-API, Assembler- und Maschinencode.
    Ungefaehr in der Reihenfolge.

    Danke auch nochmal für das übungsprog :)
    Kein Problem, hatte ohnehin gerade nichts zu tun und hab's waehrend eines Bereitschaftsdienstes nebenbei geschrieben.
    Segmentation fault (core dumped)

  4. #19
    Moderator
    Registriert seit
    Aug 2004
    Beiträge
    1.310
    Renommee
    1286

    Re: Warum geht das nicht :(

    Zitat Zitat von octogen Beitrag anzeigen
    Was bedeutet
    Code:
    largest = 0x80000000
    Also wie du die größere Zahl ermittelst.
    Das ist -1, hexadezimal geschrieben.
    Eigentlich ist das der größte negative Wert den man mit 32 Bit darstellen kann (−2.147.483.648). Der Wert -1 ist in hex 0xFFFFFFFF. Der Trick für 0x80000000 ist, dass es keine Zahl geben kann die kleiner ist, so lange man bei 32 Bit bleibt.
    Die Lösung von gruena weist largest einfach den ersten Wert zu. Das ist sicherer, weil es keine Überraschungen mit dem angenommenen kleinsten Wert geben kann.
    Setz doch largest mal auf 80 wenn du eine Liste mit den Werten 3,4,55,6,7,8 hast.

  5. #20
    Moderator
    Registriert seit
    May 2000
    Beiträge
    1.368
    Renommee
    1285

    Re: Warum geht das nicht :(

    nait hat natuerlich recht.. 0x80... ist minus 2^32, nicht minus 1

    Gedacht habe ich das beim Erstellen des Programmbeispiels auch, aber in der Doku nicht geschrieben, interessanterweise.

    Zitat Zitat von nait
    Setz doch largest mal auf 80 wenn du eine Liste mit den Werten 3,4,55,6,7,8 hast.
    Ich habe diesen Wert gewaehlt, weil dadurch garantiert ist, dass das Ergebnis niemals kleiner sein kann als der angenommene kleinste Wert.
    Warum dann bei der Beschreibung das Hirn aussetzt, und ich ploetzlich behaupte, dass das -1 ist, frage ich mich allerdings auch. Vielleicht sollte ich um Mitternacht keine Dokus mehr schreiben :D
    Segmentation fault (core dumped)

  6. #21
    Registered User
    NewYearsChallenge Sieger 2010

    Registriert seit
    Oct 2002
    Beiträge
    730
    Renommee
    444

    Re: Warum geht das nicht :(

    Zitat Zitat von octogen Beitrag anzeigen
    nait hat natuerlich recht.. 0x80... ist minus 2^32, nicht minus 1
    Sollte es nicht minus 2^31 sein? ;)
    destructor

  7. #22
    Moderator
    Registriert seit
    May 2000
    Beiträge
    1.368
    Renommee
    1285

    Re: Warum geht das nicht :(

    Zitat Zitat von destructor Beitrag anzeigen
    Sollte es nicht minus 2^31 sein? ;)
    Holy crap. Stimmt. Peinlich ;)
    Ich hoffe, meine Programme haben nicht so viele Fehler wie meine Forenbeitraege, sonst ist die Existenz des Universums gefaehrdet... ausserdem wirkt das dann etwas unglaubwuerdig, zumal ich nomalerweise der aergste Kritiker schlampiger Programmierung bin :D
    Segmentation fault (core dumped)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Antworten: 14
    Letzter Beitrag: 28.12.2004, 00:39
  2. socket.h hat geht nicht. warum ?
    Von rlKing im Forum C / C++
    Antworten: 13
    Letzter Beitrag: 01.03.2003, 10:35
  3. TonyHawk 2 geht bei mir nicht. Warum??? Kopierschutz???
    Von Ploy im Forum Reverse Engineering
    Antworten: 6
    Letzter Beitrag: 26.12.2001, 22:15
  4. Warum geht goTo nich
    Von The_Freak im Forum VisualBasic / VBScript
    Antworten: 2
    Letzter Beitrag: 26.06.2001, 20:07
  5. Root PWD: Warum geht es nicht??
    Von Sturm im Forum (In)Security allgemein
    Antworten: 9
    Letzter Beitrag: 14.12.2000, 20:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •