sscanf String einlesen und in integer umwandeln



  • Hallo,

    ich möchte einen String, in meinem Fall ein Datum mit sscanf in die int variabeln Tag,Monat,Jahr aufschlüsseln.
    Allerdings beim kompilieren kommt der Fehler: Waning: passing argument 1 of atoi makes pointer from integer without a cast

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        char string[]="29/11/2015";
        int Tag = 0;
        int Monat = 0;
        int Jahr = 0;
    
        sscanf(string, "%[^/]%d / %[^/]%d / %[^/]%d /\n", atoi(Tag), atoi(Monat), atoi(Jahr));
        
        printf("%d %d %d", Tag, Monat, Jahr);
    
        return 0;
    }
    

    Wenn ich aber es so mit einem cast mache, erhalte ich dieselben Fehlermeldungen bzw. ich erhalte noch mehr Fehlermeldungen:

     sscanf(string, "%[^/]%d / %[^/]%d / %[^/]%d /\n", (int)atoi(Tag), (int)atoi(Monat), (int)atoi(Jahr));
    

    Kann mir bitte jemand sagen was ich da falsch mache?



  • Öhm wieso meinst du atoi überhaupt zu verwenden in dem kontext?



  • @jasmin89 atoi steht für ascii to integer.

    Also Text (String) in Zahl umwandeln.
    Demnach braucht atoi als Argument einen String.

    Das besagt die Fehlermeldung.

    Die Probleme sind aber der Formatstring von sscanf - da müssen Warnungen vom Compiler kommen.
    Und das atoi hier völlig fehl am Platz ist.

    (atoi war mal ein Ersatz für unformatierten Text, der nur Ziffern enthält)



  • das problem ist, dass scanf einen zeiger als argument erwartet.

    von dem formatstring mal abgesehen könnte ein funktionierendes programm so aussehen:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
        char string[]="29/11/2015";
        int Tag = 0;
        int Monat = 0;
        int Jahr = 0;
    
        sscanf(string, "%d/%d/%d", &Tag, &Monat, &Jahr);
        
        printf("%d %d %d", Tag, Monat, Jahr);
    
        return 0;
    }
    
    


  • Ah ok, danke für die Hilfe und die Antworten. Ich habe es verstanden


Anmelden zum Antworten