String in Integer umwandeln und ausgeben ohne Library



  • DirkB schrieb:

    Klar kann der Compiler optimieren, aber trotzdem ist dein my_atoi falsch.
    Und multipliziern mit 10, subtrahieren der '0' machen beide Funktionen, das wars dann aber auch.

    Das Reultat vom sizeof ist für diesen Zweck völlig ungeeignet.

    Und probier das Ganze mal mit anderen Werten. Vor allem mit mehr oder weniger als 8 Stellen.

    Kann da nicht einer gleich sagen, dass man Strinlängen mit

    int i = strlen(ergebnis)
    

    ermittelt 🙂
    Wieder was gelernt......
    Dabke an alle!



  • SeppJ schrieb:

    Dein Programm hat mehrere Fehler/Schwächen:

    -Die Längenermittlung in Zeile 8 ist falsch. So geht das nicht in C. Noch einmal angucken, wie das mit den C-Strings und Arrays geht.
    -Selbst wenn man die Länge korrekt ermitteln würde, wäre das komplett unnötig, wegen der Natur von C-Strings.

    Wir ermuntern gerne zur Selbsthilfe. 🙂
    Aber beachte auch den 2. Punkt.
    Da du in der Schleife danach sowieso durch den String gehst, kannst du da auch gleich auf das Ende prüfen. Du brauchst das strlen gar nicht.



  • Hobbyprogger schrieb:

    Kann da nicht einer gleich sagen, dass man Strinlängen mit

    int i = strlen(ergebnis)
    

    ermittelt 🙂
    Wieder was gelernt......

    Tja und schon wieder falsch gelernt.

    Korrekt ist

    size_t i = strlen(ergebnis);
    

    Es gibt "Überraschungen" wenn du den unsigned Typ size_t beim Rechnen nicht berücksichtigst, z.B. bei

    if( strlen("123")-strlen("1234") < 0 )
    u.ä.
    


  • Wutz schrieb:

    Korrekt ist

    size_t i = strlen(ergebnis);
    

    Es gibt "Überraschungen" wenn du den unsigned Typ size_t beim Rechnen nicht berücksichtigst, z.B. bei

    if( strlen("123")-strlen("1234") < 0 )
    u.ä.
    

    int kann man ruhig nehmen. dein konstruierter fehlerfall ist quatsch. 😞



  • Dorfdeppen melden sich immer wieder ungefragt zu Wort.



  • Wutz schrieb:

    Dorfdeppen melden sich immer wieder ungefragt zu Wort.

    wow, du kannst dem dorfdeppen nicht einmal sachlich widersprechen.
    bist ja voll der held. 🙂



  • Geistig weniger Bemittelte mit Geltungsdrang aber ohne Ahnung bekommen Antworten auf dem gleichen Niveau, das sie offenbaren.



  • Hallo Leute,

    sorry hatte die letzten Tage garkeine Zeit hier reinzugucken.
    Wollte keine Welle hier schlagen mit der Aufgabe.

    Der Thread kann gerne geschlossen werden. Hoffe, dass andere von den hier gestellten Fragen und Antworten profitieren können, die auch solche Probleme haben wie ich.

    Danke für die Hilfe und die rege Diskussion



  • wurzelsepp schrieb:

    Wutz schrieb:

    Korrekt ist

    size_t i = strlen(ergebnis);
    

    Es gibt "Überraschungen" wenn du den unsigned Typ size_t beim Rechnen nicht berücksichtigst, z.B. bei

    if( strlen("123")-strlen("1234") < 0 )
    u.ä.
    

    int kann man ruhig nehmen. dein konstruierter fehlerfall ist quatsch. 😞

    Ja. Tatsächlich ist es von Vorteil, wenn Nubes int für Größen nehmen genau desdawegen. Und der konstruierte Fall ist Quatsch. Ihr habt beide recht.

    Oder nehmen wir mal einfach

    assert(index>=0);//int
    assert(index<size);//int
    

    versus

    assert(index>=0);//size_t 
    assert(index<size);//size_t
    

    . int liefert potenziell mehr bessere Fehler.

    Es ist irgendwie "besser", int zu nehmen, aber irgendwie "richtiger", size_t zu nehmen. Ich denke, es ist am besten, die Mitarbeiter zu size_t zu schulen. Und wenn das nicht geht, dann freies Gefecht. Meinetwegen double.

    Naja, wenn int nur 4 Byte hat und size_t 8 Byte verbietet sich int eh. Dann vielleicht ssize_t oder intptr_t??? Ist nicht lecker.



  • verano123 schrieb:

    Wollte keine Welle hier schlagen mit der Aufgabe.

    Lass mal. Da hast du eh keinen Einfluß drauf.
    Aber lieber etwas Leben als tote Hose.

    verano123 schrieb:

    Hoffe, dass andere von den hier gestellten Fragen und Antworten profitieren können, die auch solche Probleme haben wie ich.

    Haben sie. Auch von Fragen, die gar nicht gestellt wurden. 😃


Anmelden zum Antworten