Strings manipulieren



  • du solltest ja auch sprintf verwenden...

    int zahl=255;
    char zahl_als_chararray[4];
    sprintf(zahl_als_chararray,"%d",zahl);
    


  • prolog schrieb:

    Wenns dir hilft kann ich ja als Bibleothekengläubiger über deinen code herfallen.
    😃

    Nee hast ja recht. Naja soll er sich aussuchen.

    Es heißt Bibliothek!

    got Deutsch?



  • Es geht doch vor allem um den letzten IP-Teil.
    Wie stehts damit?

    char ip[16]= "192.168.1.1";
    char ip_last[16];
    int last_segmet = 150;
    
    strcpy(ip_last, ip);
    sprintf(strrchr(ip_last, '.')+1, "%d", last_segmet);
    


  • @dumb
    Entschuldige vielmals. Muss ich jetz das Wort Bibliothek 100 mal an die Tafel schreiben ?



  • Vielen Dank ersmal!

    Ich hatte das genau so mit printf gelöst. Allerdings hat das nicht gefunzt bis ich char ip[1000] auf char ip[4] gestzt hatte??? Ist das vom Prinzip her nicht egal?

    Nun funzt aber allles 😃 😃



  • 😃 Scheinbar nicht sonst hätte es ja geklappt 😃



  • ups ich hab das gerade mal vernünfitg getestest... ist tatsächlich noch buggy... man muss ggf. das nullbyte am ende noch vernünftig verschieben...



  • @Taurin
    Das wäre auch meine Lösung gewesen, da es ja nur hieß, dass die letzte Stelle geändert werden muss. Nur sollte man da noch eine Abfrage einbauen, ob strrchr() auch was gefunden hat. Auf die Speicheradresse 0 bzw. 1 zu schreiben, kommt nicht gut ;).

    Ansonsten würde ich der Lösung von prolog nachgehen. Die IP-Adresse also zuerst in eine Zahl umwandeln (das geht auch mit ANSI-C @Windalf ;)) davon die gewünschte Stelle entfernen, die neue Zahl einfügen und wieder in das bekannte Stringformat formatieren.



  • es gibt eigentlich eine ganz einfach ANSI-C Lösung
    bin leider nicht selber drauf gekommen werd sie euch aber nicht vorenthalten
    da hab ich irgendwie erst den wald vor lauter bäumen nicht gesehen

    void replace_ip_part(int part,char*number,char ip[16]){
      int a[4];
      sscanf(ip,"%d.%d.%d.%d",a,a+1,a+2,a+3);
      a[part]=atoi(number);
      sprintf(ip,"%d.%d.%d.%d",*a,a[1],a[2],a[3]);
    }
    


  • Noch ein kleiner Verbesserungsvorschlag (+ Fehlerkorrektur):

    char *replace_ip_part(int part,int number,char *ip)
    {
       ...
       return(ip);
    }
    


  • AJ schrieb:

    @Taurin
    Nur sollte man da noch eine Abfrage einbauen, ob strrchr() auch was gefunden hat. Auf die Speicheradresse 0 bzw. 1 zu schreiben, kommt nicht gut ;).

    Das hängt ganz von der eigenen Riskiobereitschaft ab 😉 Wenn man sich *sicher* ist,
    dass man eine IP-Adresse im string hat, dann brauch man gar nicht testen...

    @Windalf

    Ob das scanf() so ne schöne Idee ist? Vielleicht liest man die IP ja auch aus
    irgendeiner config-Datei aus, statt sie von der Tastatur zu lesen.

    Zur allgemeinen Weiterbildung:

    www.cplusplus.com/ref (insbesondere der Teil zur <string.h>)



  • Ob das scanf() so ne schöne Idee ist? Vielleicht liest man die IP ja auch aus
    irgendeiner config-Datei aus, statt sie von der Tastatur zu lesen.

    versteh ich nicht wie du das meinst.. woher das gelsen wird ist doch egal muss nur in einem char-array eingelsen werden... ich bentutze ja nicht scanf um von der konsole zu lesen sondern sscanf um aus nem string zu lesen...



  • Asche auf mein Haupt. Ob es hilft, wenn ich mein Lesefehler auf die bescheidene
    Standard-Biblithek-Nomenklatur schiebe? 😉



  • Taurin schrieb:

    Asche auf mein Haupt. Ob es hilft, wenn ich mein Lesefehler auf die bescheidene
    Standard-Biblithek-Nomenklatur schiebe? 😉

    *gg* nein. Er darf dich nun steinigen. 😃



  • *duck*



  • [OT]
    Falsche Bärte zu verkaufen!
    [/OT]

    @Taurin
    Wenn es wirklich sicher ist, dann ja, aber kann man da wirklich sicher sein?? Außerdem kann das leicht zur Gewohnheit werden, dass man es weglässt und das wär dann wieder schlecht ;).


Anmelden zum Antworten